Как запрограммировать протокол связи с сокетами iphone?

Я запрограммировал клиент-серверное приложение для Android, и я делаю то же самое для Iphone. Дело в том, что для процесса связи с Java-сервером и Android-клиентом я запрограммировал что-то вроде этого (псевдо ...):

data = read();
if ( data.compareTo("Something1") == 0) then
     write("Something2");
     data = read();
     if ( data.compareTo("Something3") == 0) then
          //End communitacion
     endif
endif

Теперь моя проблема в том, что с "розетками iphone" я не знаю, как это сделать. Я использую библиотеку AsyncScoket, и с этой библиотекой чтение не блокируется (что для меня сложно), и он использует обратные вызовы, которые я действительно не знаю, как их правильно использовать.

Я предполагаю, что после завершения чтения я должен проверить в правильном обратном вызове, равны ли отправленные данные «Something1» или «Something2» ... Но первая небольшая проблема заключается в том, что в них нет никакого порядка.

Сразу скажу, что у меня нет времени модифицировать протокол.

Если бы кто-то мог направить меня, я был бы очень благодарен. Или любой пример кода, в котором сетевое взаимодействие осуществляется с помощью библиотеки AsyncSocket.

Спасибо!


person newlog    schedule 26.08.2011    source источник


Ответы (1)


Недавно я начал использовать asyncsocket вместе с Java-сервером TCP. Возможно, этот код поможет?

Для записи в сокет вам необходимо вызвать следующий метод из объекта asyncsocket

-(void)writeData:withTimeout:tag:;

Данные здесь должны быть объектом NSData. Вы можете легко преобразовать строки в NSData, выполнив

[someStringObject dataUsingEncoding:NSUTF8Encoding];

Чтобы читать из сокета, просто вызовите этот метод

-(void)readDataWithTimeOut:tag:;

передайте -1 для тайм-аута, если вам не нужен тайм-аут.

И это все. Чтение / запись с использованием cocoaasyncsocket намного проще, чем работа с сокетами в Java, где вам нужны datainputstream, dataoutputstream и другие подобные вещи.

Важными методами делегата являются

-(void)onSocket:didReadData:withTag: gets called whenever the socket reads some data.

Пример этого делегата: ..

-(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{

      NSString *string = [[NSString alloc] initWithBytes:[data bytes] 
                                                  length:[data length]
                                                encoding:NSUTF8StringEncoding];
     //Do what ever comparison you'd like here.

}

Если вы чего-то не понимаете, дайте мне знать, и я постараюсь ответить на ваши сомнения.

person Salman Hasrat Khan    schedule 06.11.2011
comment
Наконец, я это использовал. Извините, что забыл ответить. - person newlog; 26.01.2012