iPhone socket 编程,该怎么处理
发布时间:2010-05-30 01:27:33 文章来源:www.iduyao.cn 采编人员:星星草
iPhone socket 编程
写了一个应用程序,但是不完善。请大侠们指点指点! 我的客户端是写成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 = @"";
}
------解决方案--------------------
问题解决了~
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
图片拾取器问题
用图片拾取器方法除了能拾取相册里面的图片外,能不能拾取其它文件里面非照片的图像啊,如果能,要怎么做
------解决...
-
请教个问题。。很弱智,不要嘲笑。。
请问mac osx 10.6下开发出来的程序在mac osx 10.5下可以正常使用么?会不会有些库的问题?
客户要...
-
一个数组可以放UIButton,那怎么调用这些元素呢,[array objectatindex i]不好用]
UIButton,那怎么调用这些元素呢,[array objectatinde...
-
关于imageView显示图片的问题
我现在需要在一个imageView中现在两张图片,这两张是重叠显示的,在android中,我这么做到的,imageView1.s...
-
如何在软件中嵌套ppt播放功能
如何在软件中嵌套ppt播放功能 不知道这个能实现吗
------解决方案--------------------
可以,...
-
objectivc-c
请问下自学obj-c要看哪本书比较好?
linux下可以运行obj-c的程序吗?
mac软件开发除了obj-c还需要什么别的吗?
------解...
-
怎么实现iphone客户端软件与服务器端的数据交互?
怎么实现iphone客户端软件与服务器端的数据交互?
------解决方案---------------...
-
求IOS微信界面实现思路
如题,请大神们指点一二,非常感谢!
------解决方案--------------------
问题过于笼统,无法作答
------解决...
-
给黑苹果搞个Navicat for SQLite 求个下载地址
给黑苹果搞个Navicat for SQLite 求个下载地址 谢谢
------解决方案---------...
-
iphone中按提示弄音频接收, 在线等
关于iphone中的音频接收( Streaming Live or On-Demand Video from IIS7 to iOS Devices (iPhon...