Asyncsocket iPhone читать данные - PullRequest
1 голос
/ 20 марта 2011

Я пытаюсь получить ответ от сервера .NET, используя следующий код:

Выполнение теста telnet работает (я получаю ответ);но, используя этот код, я не получаю ответ.

-(IBAction)connectClicked:(id)sender {
    if (![socket connectToHost:@"192.168.100.192" onPort:1337 error:nil]) {
        NSLog(@"connection failed");
    }    
}

-(IBAction)fireClicked:(id)sender {
    NSString *welcomeMsg = @"GetId";
    NSData *welcomeData = [welcomeMsg dataUsingEncoding:NSUTF8StringEncoding];
    [socket writeData:welcomeData withTimeout:-1 tag:0];
    NSLog(@"message sent!");
}

- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString*)host port:(UInt16)port {
    NSLog(@"onSocket:%p didConnectToHost:%@ port:%hu", sock, host, port);
    [sock readDataToData:[AsyncSocket CRLFData] withTimeout:-1 tag:0];
}

-(void) onSocket:(AsyncSocket *)sock didReadData:(NSData*)data withTag:(long)tag {
    NSLog(@"onSocket:%p didReadData:%i", tag);    
    [sock readDataToData:[AsyncSocket CRLFData] withTimeout:-1 tag:0];
}

- (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag {
    NSLog(@"onSocket:didWriteDataWithTag:%i", tag);    
    [sock readDataToData:[AsyncSocket CRLFData] withTimeout:-1 tag:0];
}

Я получаю соединение с сервером и могу отправить информацию на сервер, но я не получаю ответ.

Это то, что я получаю в журнале;

2011-03-21 10:00:32.424 CtC[33521:207] onSocket:0x4c3ebc0 didConnectToHost:192.168.100.192 port:1337
2011-03-21 10:00:35.846 CtC[33521:207] message sent!

Почему я не получаю ответ?

Ответы [ 3 ]

2 голосов
/ 21 марта 2011

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

Таким образом, эта строка

NSString *welcomeMsg = @"GetId"; 

должна стать

NSString *welcomeMsg = @"GetId\r\n";

Теперь это работает.

1 голос
/ 20 марта 2011

Мне не ясно, что может пойти не так, потому что фрагмента кода недостаточно.Но я бы так и продолжил:

  1. Убедитесь, что при подключении к хосту не возникает ошибка
  2. В вашем методе fireClicked убедитесь, что сокет правильно инициирован
  3. Возможно, переопределите метод didConnectToHost и добавьте оператор NSLog, чтобы увидеть, подключены ли вы
  4. Используйте указанный сокет "sock" внутри didReadData и didWriteDataWithTag вместо переменной "socket"
  5. Расскажите нам, какие операторы регистрации вы получаете
  6. Расскажите, как вы создали сокет и как вы подключились к хосту.

Надеюсь, это поможет - Энди

0 голосов
/ 04 апреля 2011

WireShark всегда полезен в таких ситуациях. Быстрое сравнение между telnet и вашим приложением может показать разницу.

Попробуйте удалить 'readDataWithTimeout', который есть у вас в didConnectToHost, поскольку вы все равно вызываете его после записи.
Мне интересно, если вы получаете разъединение, которое вызывает тайм-аут чтения, то есть ваш протокол проводной связи неверен. WireShark должен помочь там.

...