Форум программистов, компьютерный форум, киберфорум
Наши страницы

Objective-C

Войти
Регистрация
Восстановить пароль
 
di_ingenio
98 / 6 / 1
Регистрация: 14.05.2013
Сообщений: 50
#1

Чтение с сокета - Objective-C

04.09.2013, 11:52. Просмотров 883. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение с сокета (Objective-C):

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

Блокирующее чтение с сокета - Java SE
Мне нужно реализовать клиент серверное приложение, которое обменивается массивом байтов. Такой код не работает, если его вызвать...

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

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

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

Непрерывное чтение данных из сокета - C++ Qt
Всем привет снова я, создал клиент который должен прочитать почту все по логину и паролю подключается и выводит всё ОК но, когда я...

6
zulkis
683 / 610 / 38
Регистрация: 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
683 / 610 / 38
Регистрация: 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
Привет! Вот еще темы с ответами:

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

Чтение данных из дескриптора сокета без создания нового буфера - C (СИ)
Для чтения данных из сокета например с помощью функции read или recv нужно создать буфер и передать этот буфер одной из этих функций, и...

Узнать ип сокета - C++ Linux
Как узнать ип сокеты (переменная sock), который подключился к сервера? вот код: #include &lt;sys/types.h&gt; #include &lt;sys/socket.h&gt; ...

Ошибка сокета - C++
Вечер добрый. Столкнулся с такой проблемой. И cуть ее в следующем.. Для отправки сообщения на емайл, использую этот код: ...


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

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

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