关于大赛,按期提交了比赛视频,坐等结果。
今天整理下网络通信库文件CocoaAsyncSocket的移植和使用。
用CocoaPods导入CocoaAsyncSocket,参见http://blog.csdn.net/dominic_ding/article/details/31455349。
如果不使用CocoaPods,那么自己从github下载库文件,https://github.com/robbiehanson/CocoaAsyncSocket/。
在需要调用TCP通信的视图控制器的.h文件中引用头文件:#import "GCDAsyncSocket.h",并申明符合委托GCDAsyncSocketDelegate
建立TCP连接,并发送数据帧:
socket = [[GCDAsyncSocket alloc]initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
NSError *err = nil;
if(![socket connectToHost:@"/*目标IP地址*/" onPort:[@"/*端口地址*/" intValue] error:&err])
{
NSLog(@"未能建立TCP连接");
}else
{
NSString *temp=@"/*你需要发送的数据*/";
[socket writeData:[temp dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:0];
NSLog(@"成功发送数据");
}
如果建立了TCP连接,会调用如下函数:-(void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port
{
NSLog(@"成功建立TCP连接");
[socket readDataWithTimeout:-1 tag:0];//-1代表没有超时时间限制,tag是为了便利编程者的参数,可以随便用作自定义的某参数
}
如果收到了TCP连接返回的数据帧,会调用:
-(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
NSString *newMessage = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];//将数据帧转换为字符串
//处理newMessage字符串
}