首页 新闻 会员 周边

iPad/iPhone应用程序开发中,关于CFSocket通信,判断与服务器的断开的问题

0
悬赏园豆:50 [待解决问题]

//读函数如下:
- (void)readStream {
char buffer[64];
ssize_t nRet = 0; 
do {
        nRet = recv(CFSocketGetNative(_socket), buffer, sizeof(buffer), 0);  //从socket中读取发送端buffer中的数据
                if(nRet == 0 || nRet == -1){ //服务器退出或关闭
                    //跳出提醒框
                    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"Server has been turned down!" delegate:nil cancelButtonTitle:@"关闭" otherButtonTitles:nil];
                    [alert show];
                    [alert release];
                    close(CFSocketGetNative(_socket)); //关闭socket
                    [self doConnect];  //重新连接
        }
}while (nRet != 0 && nRet != -1);
}
 
这边的问题的是,只能连两次,第一次连接成功后,服务器退出,有提示:"Server has been turned down!",然后重新打开服务器,进行第二次连接,也能连接成功,服务器也能接收数据。第二次断开服务器,客户端就不提示了。再开服务器,却不能收到客户端给的数据。客户端再发送两次数据,就主动退出了。 这里有个Bug,应该是我的逻辑上有问题,可是我找了很久,都没找出来。
不懂会不会是我的send函数有问题?因为是自画的键盘,函数的实现如下:比如发送一个字母A
-(IBAction) sendA: (id) sender{
       //服务器上要求键盘事件的格式为k_0_65k_2_65,经过服务器解析之后,在Windows下为字母A
       NSString *stringToSend = [NSString stringWithFormat:@"k_0_65k_2_65"];
       const char *data = [stringToSend UTF8String];
       if(Socket != nil){
            send(CFSocketGetNative(Socket), data, strlen(data)+1, 0);
       }
}
希望在这能得到解决,试了很多种方法,还是一筹莫展呀

fay信梦缘的主页 fay信梦缘 | 初学一级 | 园豆:50
提问于:2011-03-22 10:01
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册