直接学习:代码会在末尾给出链接
导入第三方包
AsyncSocket.h
//客户端 AsyncSocket * _sendSocket; //服务端 AsyncSocket * _recvSocket; NSMutableArray * _socketArray;
创建两个套接字对象,一个用于发送套接字 一个用于接收套接字
首先讲一下tcp的使用方法
使用tcp传输 必须得有服务端和客户端 ,服务端必须先打开,这样才可以接收客户端发过来的信息。
服务端的创建:
//在5678端口上等待用户的连接如果有连接,5678分配一个新的端口给它进行数据的传输
[_recvSocketacceptOnPort:5678error:nil];
如果有用户连接该服务端的5678端口,则会首先调用didAcceptNewSocket:协议函数,然后会调用读取数据的函数didReadData:函数 取得数据。
客户端的创建:
//连接到服务端的5678端口上,也就是刚才服务端创建的端口
[_sendSocketconnectToHost:_ipField.textonPort:5678withTimeout:30error:nil];
//连接上不管客户端还是服务端只要连接都是会调用这个方法的
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port{
NSLog(@"连接成功");
}
如果连接上了服务器上得端口,就会调用服务端的didAcceptNewSocket:函数,并将该套接字存进专门存储的数组里,然后服务器didReadData:会一直等待该数据信息。
然后调用传输数据的函数,这样就能传输数据了
- (IBAction)sendText:(id)sender { NSData * data=[_sendField.text dataUsingEncoding:NSUTF8StringEncoding]; //发送消息 [_sendSocket writeData:data withTimeout:30 tag:0]; _textView.text=[NSString stringWithFormat:@"%@我说:%@ ",_textView.text,_sendField.text]; }
udp学习:
udp的学习比较简单,udp是不面向特定对象的链接,省去了tcp中三次握手的关节,可以直接发送包数据,速度快,但是容易丢包
看了代码就能明白了
tcp代码:http://download.csdn.net/detail/chenscda/7125229
udp代码:http://download.csdn.net/detail/chenscda/7125585