Форум программистов, компьютерный форум, киберфорум
Наши страницы
Objective-C
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
di_ingenio
98 / 6 / 1
Регистрация: 14.05.2013
Сообщений: 50
#1

Чтение с сокета

04.09.2013, 11:52. Просмотров 931. Ответов 6
Метки нет (Все метки)

Есть метод, который читает данные:
Objective-C
1
2
3
4
5
6
7
8
9
10
+ (void) readAnswer{
    while (isReading) {
        len = [inputStream read:buf maxLength:1024];
        if(len > 0 && len<1024) {
            NSMutableData* data=[[NSMutableData alloc] initWithLength:0];
            [data appendBytes: (const void *)buf length:len];
            NSMutableString* s = [[NSMutableString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        }
    }
}
На строчке len = [inputStream read:buf maxLength:1024]; иногда падает EXC_BAD_ACCESS code=2. Понять не могу в чем проблема. Может, кто сталкивался? Или есть предположения?

Подключение идет так:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
+ (void)connect{
    CFReadStreamRef readStream;
    CFWriteStreamRef writeStream;
    CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (__bridge CFStringRef)address, 5555, &readStream, &writeStream);
    //CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
    //CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
    inputStream = (__bridge NSInputStream *)readStream;
    outputStream = (__bridge NSOutputStream *)writeStream;
    [inputStream setDelegate:self];
    [outputStream setDelegate:self];
    [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [inputStream open];
    [outputStream open];
    isSocketCreate=true;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2013, 11:52
Ответы с готовыми решениями:

Чтение из сокета
Здравствуйте! Подскажите, как сделать, чтоб попытка чтения данных из...

Чтение инфы из сокета
карочь. серверная часть ServerSocket ss = new ServerSocket(5000); ...

Блокирующее чтение с сокета
Мне нужно реализовать клиент серверное приложение, которое обменивается...

Чтение данных из сокета
Доброго времени суток! Подскажите, такой вопрос, есть один чатик,...

Непрерывное чтение данных из сокета
Всем привет снова я, создал клиент который должен прочитать почту все по...

6
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
04.09.2013, 12:48 #2
buf у вас где? Покажите инициализацию.
0
di_ingenio
98 / 6 / 1
Регистрация: 14.05.2013
Сообщений: 50
04.09.2013, 12:52  [ТС] #3
Цитата Сообщение от zulkis Посмотреть сообщение
buf у вас где? Покажите инициализацию.
Objective-C
1
2
3
4
5
6
7
8
9
10
@implementation Socket
NSInputStream *inputStream;
NSOutputStream *outputStream;
NSMutableString *serverMessage;
 
int timeoutMax=200;
int timeout=200;
 
uint8_t buf[1024];
int len = 0;
Вот как-то так.
0
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
04.09.2013, 18:22 #4
ок, тогда так:
Иногда, как вы говорите, это когда?
0
di_ingenio
98 / 6 / 1
Регистрация: 14.05.2013
Сообщений: 50
05.09.2013, 11:46  [ТС] #5
Цитата Сообщение от zulkis Посмотреть сообщение
ок, тогда так:
Иногда, как вы говорите, это когда?
Это, так сказать, плавающий баг. В том-то и дело, что понять не могу почему и в каких ситуациях. Просто иногда падает, а иногда все ок работает. Не знаю почему. Думала, что может, кто-нибудь ошибку очевидную увидит или же уже кто-то сталкивался с такой проблемой.
0
glvrzzz
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
12.09.2013, 12:43 #6
Цитата Сообщение от di_ingenio Посмотреть сообщение
Objective-C
1
2
3
4
5
6
7
8
9
10
@implementation Socket
NSInputStream *inputStream;
NSOutputStream *outputStream;
NSMutableString *serverMessage;
 
int timeoutMax=200;
int timeout=200;
 
uint8_t buf[1024];
int len = 0;
Вот как-то так.

Я правильно понял, что у вас inputStream глобальный?
NSZombie включали?
есть подозрения, что inputStream деаллочится раньше времени
0
di_ingenio
98 / 6 / 1
Регистрация: 14.05.2013
Сообщений: 50
16.09.2013, 13:22  [ТС] #7
Цитата Сообщение от glvrzzz Посмотреть сообщение
Я правильно понял, что у вас inputStream глобальный?
NSZombie включали?
есть подозрения, что inputStream деаллочится раньше времени
Да, глобальный, NSZombie я включала, но ничего необычного не заметила. Но еще раз проверю.

Добавлено через 23 минуты
Если конкретнее, то падает тут
Objective-C
1
2
#0  0x312701cc in CFBasicHashGetBucket ()
#12 0x3129e5d6 in CFReadStreamRead ()
0
16.09.2013, 13:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2013, 13:22

Паралельная запись и чтение из сокета
Добрый день. У меня такой вопрос стал. Можно ли из одного сокета параллельно...

Чтение данных из входного потока сокета
Всем привет! s = new Socket(this.parametersModbusTCP.getIpAddress(),...

Чтение данных из дескриптора сокета без создания нового буфера
Для чтения данных из сокета например с помощью функции read или recv нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru