Asyncsocket iPhone读取数据

时间:2011-03-19 22:38:20

标签: ios iphone asyncsocket

我正在尝试使用以下代码从.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 个答案:

答案 0 :(得分:2)

我也有同样的问题。我模拟了'进入'写入数据时按钮,因为服务器不知道命令何时结束。

所以这一行

NSString *welcomeMsg = @"GetId"; 

应该成为

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

现在有效。

答案 1 :(得分:1)

我不清楚可能出现什么问题,因为代码段还不够。但这就是我要继续下去的方式:

  1. 检查连接到主机时是否出现错误
  2. 在fireClicked方法中,确保套接字已正确启动
  3. 也许覆盖didConnectToHost方法并添加NSLog语句以查看是否已连接
  4. 在didReadData和didWriteDataWithTag中使用给定套接字“sock”而不是变量“socket”
  5. 告诉我们您获取的日志记录
  6. 告诉我们您是如何创建套接字以及如何连接到主机的。
  7. 希望有所帮助 - 安迪

答案 2 :(得分:0)

WireShark在这些情况下总是很有用。 telnet和你的应用程序之间的快速比较可能表明存在差异。

尝试删除didConnectToHost中的'readDataWithTimeout',因为无论如何你都要在写完后调用它。
我想知道你是否在断开连接导致读取超时,即你的线路协议是错误的。 WireShark应该帮助那里。