1

我正在尝试使用以下代码捕获来自 .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!

为什么我没有收到回复?

4

3 回答 3

2

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

所以这条线

NSString *welcomeMsg = @"GetId"; 

应该成为

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

它现在起作用了。

于 2011-03-21T12:23:15.283 回答
1

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

  1. 检查当您连接到主机时它不会引发错误
  2. 在您的 fireClicked 方法中,确保正确启动了套接字
  3. 也许覆盖 didConnectToHost 方法并添加 NSLog 语句以查看您是否连接
  4. 在 didReadData 和 didWriteDataWithTag 中使用给定的套接字“sock”而不是变量“socket”
  5. 告诉我们您得到了哪些日志记录语句
  6. 告诉我们您是如何创建套接字以及如何连接到主机的。

希望有帮助 - 安迪

于 2011-03-20T02:07:02.707 回答
0

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

尝试删除 didConnectToHost 中的“readDataWithTimeout”,因为无论如何在写入之后都会调用它。
我想知道您是否遇到了导致读取超时的断开连接,即您的有线协议错误。WireShark 应该在那里提供帮助。

于 2011-04-04T11:52:15.177 回答