socket 套接字, 是基于TCP UDP  协议的  一种通信机制,   它本身就是对TCP 和UDp 协议应用的一种管理
 
iOS 中 socket 通信
1,我们使用第三方库AsyncSocket 
准备工作
1,  把AsyncSocket  加入到我们的工程,   这个玩意 一般是手动的,  如果你使用的是自动的, 需要再变异的时候 添加 fno-objec-arc
2,  使用第三方库,  我们需要添加一个类库,CFNetwork.framework
2, 准备工作完成后,  我们下面了解下ios 中socket 的通信 是怎么完成的
1, socket  通信,   首先  有两个端 :  客户端 和 服务端
2,  服务端的工作:  声明一个socket,   因为两个终端的通信, 必须绑定一个端口,  所以 下一步 是绑定端口, 再下一步就是监听端口,   当监听的链接请求的时候,    建立链接成功后, 然后就阻塞 等待客户端发送数据
        3, 客户端:  声明一个socket,    第二步  连接指定ip,     和端口,  第三步:  发送数据
 示例:
TCP   
服务端: 
1, 遵守协议(别忘了遵守协议<AsyncSocketDelegate>), 然后声明      
_recvSocket = [[AsyncSocketalloc]initWithDelegate:self];
     2, 绑定端口
 //监听客户端来连接
    [_recvSocketacceptOnPort:5678error:nil];
     3, 监听连接,  当有链接请求的时候,  调用此方法  并把socket 存到数组 保存起来, 因为TCP 是长连接
 
- - (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket{  
 
-   [_socketArray addObject:newSocket];  
 
-   
 
-    [newSocket readDataWithTimeout:-1 tag:0];  
 
- }  
 
 
    4, 等待客户端发送消息, 接受客户端发送消息时触发,
 
- <pre name="code" class="objc">
 
-   
 
- - (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{  
 
-     
 
-     [sock readDataWithTimeout:-1 tag:0];  
 
-       
 
- }  
 
 
客户端:
1, 声明
 
 
-     _sendSocket = [[AsyncSocket alloc] initWithDelegate:self];  
 
 
2, 连接服务端
 
- - (void)conToHost:(id)sender{  
 
-     
 
-     if (_sendSocket.isConnected) {  
 
-         [_sendSocket disconnect];  
 
-     }  
 
-       
 
-     
 
-     [_sendSocket connectToHost:_ipField.text onPort:5678 withTimeout:30 error:nil];  
 
- }  
 
 
3, 发送消息
 
- [_sendSocket writeData:doc.XMLData withTimeout:30 tag:0];  
 
 
 
以下两个方法  服务端 和  客户端  都会调用
 
- - (void)onSocketDidDisconnect:(AsyncSocket *)sock{  
 
-   
 
-     NSLog(@"断开连接");  
 
- }  
 
 
 
- - (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port{  
 
-   
 
-     NSLog(@"连接成功%@", host);  
 
- }  
 
 
 
UDP 通信示例:
 因为UDP 发送消息 实现不需要建立连接,  这比TCP 简便多了,  UDP 就一个监听接收消息端口的 函数 即可, 比较简单
服务端
1, socket  声明, 并制定委托
-     _recvSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];  
 
 
       2, 绑定 监听的端口
 
-     [_recvSocket bindToPort:6789 error:nil];  
 
 
3, 开始监听 接受消息的端口
 
-     [_recvSocket receiveWithTimeout:-1 tag:0];  
 
 
4, 监听到消息 调用的函数
- - (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port{  
 
- ....  
 
-     
 
-     [_recvSocket receiveWithTimeout:-1 tag:0];  
 
-     return YES;  
 
- }  
 
 
 
 
2014-11-24 23:12 44人阅读 
socket 套接字, 是基于TCP UDP  协议的  一种通信机制,   它本身就是对TCP 和UDp 协议应用的一种管理
 
iOS 中 socket 通信
1,我们使用第三方库AsyncSocket 
准备工作
1,  把AsyncSocket  加入到我们的工程,   这个玩意 一般是手动的,  如果你使用的是自动的, 需要再变异的时候 添加 fno-objec-arc
2,  使用第三方库,  我们需要添加一个类库,CFNetwork.framework
2, 准备工作完成后,  我们下面了解下ios 中socket 的通信 是怎么完成的
1, socket  通信,   首先  有两个端 :  客户端 和 服务端
2,  服务端的工作:  声明一个socket,   因为两个终端的通信, 必须绑定一个端口,  所以 下一步 是绑定端口, 再下一步就是监听端口,   当监听的链接请求的时候,    建立链接成功后, 然后就阻塞 等待客户端发送数据
        3, 客户端:  声明一个socket,    第二步  连接指定ip,     和端口,  第三步:  发送数据
 示例:
TCP   
服务端: 
1, 遵守协议(别忘了遵守协议<AsyncSocketDelegate>), 然后声明      
_recvSocket = [[AsyncSocketalloc]initWithDelegate:self];
     2, 绑定端口
 //监听客户端来连接
    [_recvSocketacceptOnPort:5678error:nil];
     3, 监听连接,  当有链接请求的时候,  调用此方法  并把socket 存到数组 保存起来, 因为TCP 是长连接
 
- - (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket{  
 
-   [_socketArray addObject:newSocket];  
 
-   
 
-    [newSocket readDataWithTimeout:-1 tag:0];  
 
- }  
 
 
    4, 等待客户端发送消息, 接受客户端发送消息时触发,
 
- <pre name="code" class="objc">
 
-   
 
- - (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{  
 
-     
 
-     [sock readDataWithTimeout:-1 tag:0];  
 
-       
 
- }  
 
 
客户端:
1, 声明
 
 
-     _sendSocket = [[AsyncSocket alloc] initWithDelegate:self];  
 
 
2, 连接服务端
 
- - (void)conToHost:(id)sender{  
 
-     
 
-     if (_sendSocket.isConnected) {  
 
-         [_sendSocket disconnect];  
 
-     }  
 
-       
 
-     
 
-     [_sendSocket connectToHost:_ipField.text onPort:5678 withTimeout:30 error:nil];  
 
- }  
 
 
3, 发送消息
 
- [_sendSocket writeData:doc.XMLData withTimeout:30 tag:0];  
 
 
 
以下两个方法  服务端 和  客户端  都会调用
 
- - (void)onSocketDidDisconnect:(AsyncSocket *)sock{  
 
-   
 
-     NSLog(@"断开连接");  
 
- }  
 
 
 
- - (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port{  
 
-   
 
-     NSLog(@"连接成功%@", host);  
 
- }  
 
 
 
UDP 通信示例:
 因为UDP 发送消息 实现不需要建立连接,  这比TCP 简便多了,  UDP 就一个监听接收消息端口的 函数 即可, 比较简单
服务端
1, socket  声明, 并制定委托
-     _recvSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];  
 
 
       2, 绑定 监听的端口
 
-     [_recvSocket bindToPort:6789 error:nil];  
 
 
3, 开始监听 接受消息的端口
 
-     [_recvSocket receiveWithTimeout:-1 tag:0];  
 
 
4, 监听到消息 调用的函数
- - (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port{  
 
- ....  
 
-     
 
-     [_recvSocket receiveWithTimeout:-1 tag:0];  
 
-     return YES;  
 
- }  
 
 
 
 
客户端
1 
-     _sendSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];  
 
-     [_sendSocket bindToPort:6789 error:nil];  
 
 
2, 发送  ,  里面的参数 需要指定 发送目的ip  端口  超时时间等
 
[_sendSocket
 sendData:doc.XMLData toHost:_ipTextfiled.text port:6789 withTimeout:30 tag:0]; 
客户端
1 
-     _sendSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];  
 
-     [_sendSocket bindToPort:6789 error:nil];  
 
 
2, 发送  ,  里面的参数 需要指定 发送目的ip  端口  超时时间等
 
[_sendSocket
 sendData:doc.XMLData toHost:_ipTextfiled.text port:6789 withTimeout:30 tag:0];