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];