专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Iphone

CFSocket通信,判断与服务器的断开有关问题

发布时间:2010-05-30 01:25:47 文章来源:www.iduyao.cn 采编人员:星星草
CFSocket通信,判断与服务器的断开问题
- (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);
  }
}
请路过的来看看,帮帮忙,谢谢

------解决方案--------------------
我来终结这个帖子,呵呵。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: