码迷,mamicode.com
首页 > 其他好文 > 详细

socket 通信机制的实现

时间:2015-04-19 17:41:30      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

 

IOS socket 通信机制的实现

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 是长连接

 

  1. - (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket{  
  2.   [_socketArray addObject:newSocket];  
  3.   //等待客户端 发送消息   -1 是永远等待  
  4.    [newSocket readDataWithTimeout:-1 tag:0];  
  5. }  
    4, 等待客户端发送消息, 接受客户端发送消息时触发,

 

  1. <pre name="code" class="objc">// 监听到客户端发送消息  
  2.   
  3. - (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{  
  4.     // 继续监听 客户端 发来的消息, 形成循环监听  
  5.     [sock readDataWithTimeout:-1 tag:0];  
  6.       
  7. }  




客户端:

1, 声明

 

 

  1. //---客户端  
  2.     _sendSocket = [[AsyncSocket alloc] initWithDelegate:self];  

2, 连接服务端

 

  1. //-----客户端  
  2. //连接至服务端  
  3. - (void)conToHost:(id)sender{  
  4.     //如果是连接状态,  先断开连接  
  5.     if (_sendSocket.isConnected) {  
  6.         [_sendSocket disconnect];  
  7.     }  
  8.       
  9.     //连接  
  10.     [_sendSocket connectToHost:_ipField.text onPort:5678 withTimeout:30 error:nil];  
  11. }  
3, 发送消息

 

  1. [_sendSocket writeData:doc.XMLData withTimeout:30 tag:0];  

 

以下两个方法  服务端 和  客户端  都会调用

 

  1. // 作为服务器的时候,  有人断开连接 ,会调用此方法  
  2. //最为客户端  断开连接服务器的时候 也会调用此方法  
  3. //断开链接的时候,  别人与你断开连接的时候也会调用  
  4. - (void)onSocketDidDisconnect:(AsyncSocket *)sock{  
  5.   
  6.     NSLog(@"断开连接");  
  7. //    [_socketArray removeObject:sock];  
  8. }  

 

  1. // 作为服务器的时候,  有人连接成功 ,会调用此方法  
  2. //最为客户端  连接成功服务器的时候 也会调用此方法  
  3. // 连接成功,  这个客户端 和服务端 都会调用这个方法,  别人链接我的时候 链接成功的时候, 会调用此方法,   我主动链接别人的服务端的时候, 如果连接成功  会调用两次这个方法  
  4. - (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port{  
  5.   
  6.     NSLog(@"连接成功%@", host);  
  7. }  

 

UDP 通信示例:

 因为UDP 发送消息 实现不需要建立连接,  这比TCP 简便多了,  UDP 就一个监听接收消息端口的 函数 即可, 比较简单

服务端

1, socket  声明, 并制定委托

  1. //服务端  
  2.     _recvSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];  
       2, 绑定 监听的端口

 

  1. //绑定一个端口  
  2.     [_recvSocket bindToPort:6789 error:nil];  
3, 开始监听 接受消息的端口

 

  1. //开始监听接收消息  
  2.     [_recvSocket receiveWithTimeout:-1 tag:0];  
4, 监听到消息 调用的函数
  1. //接收到消息,  HOST:发送端的ip  
  2. - (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port{  
  3. ....  
  4.     //继续监听  接收消息  
  5.     [_recvSocket receiveWithTimeout:-1 tag:0];  
  6.     return YES;  
  7. }  


 

 

 

IOS socket 通信机制的实现

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 是长连接

 

  1. - (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket{  
  2.   [_socketArray addObject:newSocket];  
  3.   //等待客户端 发送消息   -1 是永远等待  
  4.    [newSocket readDataWithTimeout:-1 tag:0];  
  5. }  
    4, 等待客户端发送消息, 接受客户端发送消息时触发,

 

  1. <pre name="code" class="objc">// 监听到客户端发送消息  
  2.   
  3. - (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{  
  4.     // 继续监听 客户端 发来的消息, 形成循环监听  
  5.     [sock readDataWithTimeout:-1 tag:0];  
  6.       
  7. }  




客户端:

1, 声明

 

 

  1. //---客户端  
  2.     _sendSocket = [[AsyncSocket alloc] initWithDelegate:self];  

2, 连接服务端

 

  1. //-----客户端  
  2. //连接至服务端  
  3. - (void)conToHost:(id)sender{  
  4.     //如果是连接状态,  先断开连接  
  5.     if (_sendSocket.isConnected) {  
  6.         [_sendSocket disconnect];  
  7.     }  
  8.       
  9.     //连接  
  10.     [_sendSocket connectToHost:_ipField.text onPort:5678 withTimeout:30 error:nil];  
  11. }  
3, 发送消息

 

  1. [_sendSocket writeData:doc.XMLData withTimeout:30 tag:0];  

 

以下两个方法  服务端 和  客户端  都会调用

 

  1. // 作为服务器的时候,  有人断开连接 ,会调用此方法  
  2. //最为客户端  断开连接服务器的时候 也会调用此方法  
  3. //断开链接的时候,  别人与你断开连接的时候也会调用  
  4. - (void)onSocketDidDisconnect:(AsyncSocket *)sock{  
  5.   
  6.     NSLog(@"断开连接");  
  7. //    [_socketArray removeObject:sock];  
  8. }  

 

  1. // 作为服务器的时候,  有人连接成功 ,会调用此方法  
  2. //最为客户端  连接成功服务器的时候 也会调用此方法  
  3. // 连接成功,  这个客户端 和服务端 都会调用这个方法,  别人链接我的时候 链接成功的时候, 会调用此方法,   我主动链接别人的服务端的时候, 如果连接成功  会调用两次这个方法  
  4. - (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port{  
  5.   
  6.     NSLog(@"连接成功%@", host);  
  7. }  

 

UDP 通信示例:

 因为UDP 发送消息 实现不需要建立连接,  这比TCP 简便多了,  UDP 就一个监听接收消息端口的 函数 即可, 比较简单

服务端

1, socket  声明, 并制定委托

  1. //服务端  
  2.     _recvSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];  
       2, 绑定 监听的端口

 

  1. //绑定一个端口  
  2.     [_recvSocket bindToPort:6789 error:nil];  
3, 开始监听 接受消息的端口

 

  1. //开始监听接收消息  
  2.     [_recvSocket receiveWithTimeout:-1 tag:0];  
4, 监听到消息 调用的函数
  1. //接收到消息,  HOST:发送端的ip  
  2. - (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port{  
  3. ....  
  4.     //继续监听  接收消息  
  5.     [_recvSocket receiveWithTimeout:-1 tag:0];  
  6.     return YES;  
  7. }  


 

 

客户端

  1. //发送端  
  2.     _sendSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];  
  3.     [_sendSocket bindToPort:6789 error:nil];  
2, 发送  ,  里面的参数 需要指定 发送目的ip  端口  超时时间等

 

[_sendSocket sendData:doc.XMLData toHost:_ipTextfiled.text port:6789 withTimeout:30 tag:0];

客户端

  1. //发送端  
  2.     _sendSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];  
  3.     [_sendSocket bindToPort:6789 error:nil];  
2, 发送  ,  里面的参数 需要指定 发送目的ip  端口  超时时间等

 

[_sendSocket sendData:doc.XMLData toHost:_ipTextfiled.text port:6789 withTimeout:30 tag:0];

socket 通信机制的实现

标签:

原文地址:http://www.cnblogs.com/JZY3160/p/4439376.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!