iPhone socket 编程

linux_fay 2011-03-03 10:00:32
写了一个应用程序,但是不完善。请大侠们指点指点! 我的客户端是写成iPhone应用程序,socket是用CFsocket来写的。服务器是在Windows下,用MFC来写的。遵循的是TCP协议。现在已经测试通过了! 但有一个问题,就是当服务器断开之后,客户端并没有监听到服务器的断开,想问一下如何写个监听程序,当服务器断开时,客户端能及时退出,并返回重新连接的界面! 谢谢先~

连接图和发送图:
http://www.cocoachina.com/bbs/read.php?tid-48722.html


连接代码如下:
- (void) doConnect {
CFSocketContext CTX = {0, self, NULL, NULL, NULL};

//Create the socket of TCP
_socket = CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_STREAM, IPPROTO_TCP, kCFSocketConnectCallBack, TCPServerConnectCallBack, &CTX);

//Create Error
if (NULL == _socket) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"Create socket error" delegate:nil cancelButtonTitle:@"关闭" otherButtonTitles:nil];
[alert show];
[alert release];
}

struct sockaddr_in Server_addr;

memset(&Server_addr, 0, sizeof(Server_addr));

Server_addr.sin_len = sizeof(Server_addr);
Server_addr.sin_family = AF_INET;
Server_addr.sin_addr.s_addr = htonl(0xc0a800c8L); //Only 192.168.2.202 allowed
Server_addr.sin_port = htons(70); //Only Port 70 allowed
//Server_addr.sin_addr.s_addr = inet_addr([connController.textField.text UTF8String]);

CFDataRef address = CFDataCreate(kCFAllocatorDefault, (UInt8 *)&Server_addr, sizeof(Server_addr));

//Connect the the server's socket
CFSocketConnectToAddress(_socket, address, -1);


CFRunLoopRef cfrl = CFRunLoopGetCurrent();
CFRunLoopSourceRef source = CFSocketCreateRunLoopSource(kCFAllocatorDefault, _socket, 0);
CFRunLoopAddSource(cfrl, source, kCFRunLoopCommonModes);
CFRelease(source);

CFRunLoopRun();

while (1) {
struct timeval tv;
tv.tv_usec = 0;
tv.tv_sec = 1;
select(-1, NULL, NULL, NULL, &tv);
}
}

发送代码如下:
- (void) sendMessage {
NSString *stringToSend = [sendController.textField.text stringByAppendingString:@"\n"];
const char *data = [stringToSend UTF8String];
send(CFSocketGetNative(_socket), data, strlen(data) + 1, 0);
NSRange endRange;
endRange.location = [sendController.textView.text length];
endRange.length = [stringToSend length];
sendController.textView.text = [sendController.textView.text stringByAppendingString:[@"Client: " stringByAppendingString:stringToSend]];
[sendController.textView scrollRangeToVisible:endRange];
sendController.textField.text = @"";
}

...全文
1640 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongbin741 2013-10-17
  • 打赏
  • 举报
回复
引用 7 楼 Linux_fay 的回复:
[Quote=引用 6 楼 minqingwang 的回复:] 楼主能给我瞧瞧你的服务器端和客户端代码吗?借我参考一下喔,可以的话发到我邮箱喔 wangminqing10@yahoo.cn 万分感谢喔 [/Quote] 这个不能给吧,不好意思!
那就给人家一个简单的demo。大家一起学习不是挺好?
hjlorange 2012-03-07
  • 打赏
  • 举报
回复
现在真研究如何将iPhone发送请求发送到windows 系统下的visual studio 项目并把图片传到window系统下的visual studio?有知道的吗
linux_fay 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 minqingwang 的回复:]

楼主能给我瞧瞧你的服务器端和客户端代码吗?借我参考一下喔,可以的话发到我邮箱喔
wangminqing10@yahoo.cn

万分感谢喔
[/Quote]

这个不能给吧,不好意思!
minqingwang 2011-11-10
  • 打赏
  • 举报
回复
楼主能给我瞧瞧你的服务器端和客户端代码吗?借我参考一下喔,可以的话发到我邮箱喔
wangminqing10@yahoo.cn

万分感谢喔
lzttxs1 2011-10-26
  • 打赏
  • 举报
回复
朋友能给处解决方法么!小弟也同样遇到这个问题,谢谢!!!!
  • 打赏
  • 举报
回复
问题解决了~
GuanMingSoft 2011-03-09
  • 打赏
  • 举报
回复
gooood
大招至胜 2011-03-07
  • 打赏
  • 举报
回复
你的问题,其实TCP/IP中有说的,请去查看TCP/IP详解。服务器断了,你会收到东西的。去查看一下协议。

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧