全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
iphone socket开发在iphone的平台下,要进行socket开发其实有很多种的方法,开源的库Asyncsocket,官方的CFSocket,还有BSD的socket。这里要做一个简单的socket普及,这里包含在socket的设置非阻塞喝超时的控制逻辑,心跳包和线程的启动时间同步的控制。这里都是标准的linux的流程先创建一个socket- (int)CSocketif(sockfd = socket(AF_INET, SOCK_STREAM,0) = -1)perror(socket);exit(errno);returnsockfd;然后是链接/- (BOOL)ConnectToServer:(NSString*)addr port:(int)porttheir_addr.sin_family = AF_INET;their_addr.sin_addr.s_addr = inet_addr(addr UTF8String);their_addr.sin_port = htons(port);bzero(&(their_addr.sin_zero),8);intconn = connect(sockfd, (structsockaddr*)&their_addr,sizeof(structsockaddr);NSLog(Connect error no is %d:,conn);returnmisConnect;这样子的链接是阻塞的,这样子就比较不好,可以设置成非阻塞的方式来控制超时/*/在connect之前,设成非阻塞模式intflags = fcntl(sockfd, F_GETFL,0);fcntl(sockfd,F_SETFL, flags | O_NONBLOCK);/*/这是另外一种设置成非阻塞的方式int flags;if(flags = fcntl(sockfd, F_GETFL) 0 )perror(fcntl F_SETFL);flags |= O_NONBLOCK;if(fcntl(sockfd, F_SETFL,flags) 0)perror(fcntl);*/设置connect后可以设置用select设置超时/*/设置超时fd_setfdwrite;structtimevaltvSelect;FD_ZERO(&fdwrite);FD_SET(sockfd, &fdwrite);tvSelect.tv_sec =2;tvSelect.tv_usec =0;intretval = select(sockfd +1,NULL, &fdwrite,NULL, &tvSelect);if(retval 0)misConnect =YES;/*/在connect成功之后,设成阻塞模式flags = fcntl(sockfd, F_GETFL,0);flags &= O_NONBLOCK;fcntl(sockfd,F_SETFL, flags);/*/设置不被SIGPIPE信号中断,物理链路损坏时才不会导致程序直接被Terminate/在网络异常的时候如果程序收到SIGPIRE是会直接被退出的。structsigaction sa;sa.sa_handler = SIG_IGN;sigaction( SIGPIPE, &sa,0);/*/然后就可以收发数据了send,write两种方法都可以,你需要自己维护一个队列,控制时间等等NSString *str = SendCmdArray objectAtIndex:0;NSData *data = str dataUsingEncoding:NSISOLatin1StringEncoding;/ssize_t datalen = send(sockfd,data bytes,data length,0);ssize_t datalen = write(sockfd, data bytes, data length);if(datalen = data length)NSLog(Send str:%,str);如何接收数据,read和recv都可以,这是方法,你需要自己维护一个队列,控制时间等等。charreadBuffer512 = 0;NSString* readString =nil;intbr =0;while(br = read(sockfd, readBuffer,sizeof(readBuffer) sizeof(readBuffer)/while(br = recv(sockfd, readBuffer, sizeof(readBuffer), 0) tm_wday =0)wday =7;elsewday = p-tm_wday;chardata256 = 0;sprintf(data,0E4007%02x%02x%02x%02x%02x%02x%02x,(1900+p-tm_year)%100,(1+p-tm_mon),p-tm_mday,p-tm_hour,p-tm_min,p-tm_sec,wday);NSString *msgtime = NSString stringWithUTF8String:data;可以开一个线程来进行收发,处理相关的操作,想要多线程控制需要注意这个socket必须是全局可用的,因为新线程已经不在主循环了还有如果有界面更新也需要在主线程更新NSThread detachNewThreadSelector:selector(OnNewThread) toTarget:selfwithObject:nil;可以用timer做一个心跳包维持通讯timer = NSTimer scheduledTimerWithTimeInter
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 多重耐药菌感染的预防与控制 课件
- 电气控制及S7-1200 PLC应用技术(第二版)(吴玮)课后习题及答案
- 2024年冀教版七年级英语下册Unit 2复习题及答案
- 投标个人工作总结
- 山西省2024九年级物理全册第二十章电与磁20.1磁现象磁澄件新版新人教版
- 2024年南阳市内乡县《高等数学(一)》(专升本)预测试卷含解析
- 2024年伊犁哈萨克自治州察布查尔锡伯自治县《高等数学(一)》(专升本)模拟预测试卷含解析
- 2024年临汾市汾西县《高等数学(一)》(专升本)巅峰冲刺试卷含解析
- 红屿别墅智能家居设计方案(全文)
- 全国2022年1月高等教育自学考试民事诉讼法学试题-2
- 山东省烟台市牟平区(五四制)2023-2024学年九年级下学期期中考试数学试题
- 2024-2029年电子实验室笔记本行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2024年四川省绵阳市中考二模地理试题
- 企事业单位全面风险清单(含内控风险-2023版-雷泽佳编制)
- 法兰盘加工工艺设计方案
- 24节气-中国人的时间美学智慧树知到期末考试答案2024年
- 工程造价司法鉴定实施方案
- 磨光机安全操作培训教程.ppt
- AGV(自动导引车 )简介
- 医院事业单位招录100题真题真解(结构化面试)
- 系统分析师考试论文案例集_pdf版.pdf
评论
0/150
提交评论