我正在尝试使用以下代码从.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!
为什么我没有收到回复?
答案 0 :(得分:2)
我也有同样的问题。我模拟了'进入'写入数据时按钮,因为服务器不知道命令何时结束。
所以这一行
NSString *welcomeMsg = @"GetId";
应该成为
NSString *welcomeMsg = @"GetId\r\n";
现在有效。
答案 1 :(得分:1)
我不清楚可能出现什么问题,因为代码段还不够。但这就是我要继续下去的方式:
希望有所帮助 - 安迪
答案 2 :(得分:0)
WireShark在这些情况下总是很有用。 telnet和你的应用程序之间的快速比较可能表明存在差异。
尝试删除didConnectToHost中的'readDataWithTimeout',因为无论如何你都要在写完后调用它。
我想知道你是否在断开连接导致读取超时,即你的线路协议是错误的。 WireShark应该帮助那里。