【发布时间】:2010-09-15 15:44:33
【问题描述】:
我正在使用以下代码连接到服务器套接字:
- (void)viewDidLoad {
[super viewDidLoad];
asyncSocket = [[AsyncSocket alloc] initWithDelegate:self];
NSError *err = nil;
//[asyncSocket connectToHost:@"192.168.0.200" onPort:8000 error:&err];
if(![asyncSocket connectToHost:@"192.168.0.78" onPort:2055 error:&err])
{
[asyncSocket connectToHost:@"192.168.0.78" onPort:2055 error:&err];
}
}
然后在 didConnectToHost 委托中,我正在写一些文本:
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
{
NSLog(@"onSocket:%p didConnectToHost:%@ port:%hu", sock, host, port);
for(int i=0;i<5;i++){
NSString* str= [NSString stringWithFormat: @"Hello Server: %d",i];
NSData* data=[str dataUsingEncoding:NSUTF8StringEncoding];
[sock writeData:data withTimeout:-1 tag:1];
}
}
当我连接到套接字时,连接的消息会显示在服务器端控制台上。在服务器端,正在使用 streamReader 从流中读取数据。我们在服务器端使用 TCPListener 类(c# .Net)。但是当我从客户端套接字写入数据并尝试读取客户端发送的数据时,服务器上的 streamReader 对象正在获取空数据。当我们退出客户端应用程序时,服务器端的streamReader对象正在获取客户端发送的数据。
我们需要从客户端写入后立即在服务器端读取数据,而不是退出应用程序。
谁能帮我解决这个问题?
【问题讨论】:
-
如果第一次失败,您为什么要立即尝试与同一 IP/端口建立新连接?如果它失败了,肯定是有问题,并且在如此快速地重试时几乎肯定会失败?