socket 通信机制的实现

IOS socket 通信机制的实现

2014-11-24 23:12 44人阅读 评论(0) 收藏 举报

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

[objc] view plaincopy

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

4, 等待客户端发送消息, 接受客户端发送消息时触发,

[objc] view plaincopy

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

客户端:

1, 声明

[objc] view plaincopy

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

2, 连接服务端

[objc] view plaincopy

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

3, 发送消息

[objc] view plaincopy

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

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

[objc] view plaincopy

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

[objc] view plaincopy

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

UDP 通信示例:

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

服务端

1, socket  声明, 并制定委托

[objc] view plaincopy

  1. //服务端
  2. _recvSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];

2, 绑定 监听的端口

[objc] view plaincopy

  1. //绑定一个端口
  2. [_recvSocket bindToPort:6789 error:nil];

3, 开始监听 接受消息的端口

[objc] view plaincopy

  1. //开始监听接收消息
  2. [_recvSocket receiveWithTimeout:-1 tag:0];

4, 监听到消息 调用的函数

[objc] view plaincopy

  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 通信机制的实现

2014-11-24 23:12 44人阅读 评论(0) 收藏 举报

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

[objc] view plaincopy

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

4, 等待客户端发送消息, 接受客户端发送消息时触发,

[objc] view plaincopy

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

客户端:

1, 声明

[objc] view plaincopy

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

2, 连接服务端

[objc] view plaincopy

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

3, 发送消息

[objc] view plaincopy

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

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

[objc] view plaincopy

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

[objc] view plaincopy

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

UDP 通信示例:

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

服务端

1, socket  声明, 并制定委托

[objc] view plaincopy

  1. //服务端
  2. _recvSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];

2, 绑定 监听的端口

[objc] view plaincopy

  1. //绑定一个端口
  2. [_recvSocket bindToPort:6789 error:nil];

3, 开始监听 接受消息的端口

[objc] view plaincopy

  1. //开始监听接收消息
  2. [_recvSocket receiveWithTimeout:-1 tag:0];

4, 监听到消息 调用的函数

[objc] view plaincopy

  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

[objc] view plaincopy

  1. //发送端
  2. _sendSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];
  3. [_sendSocket bindToPort:6789 error:nil];

2, 发送  ,  里面的参数 需要指定 发送目的ip  端口  超时时间等

[objc] view plaincopy

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

客户端

1

[objc] view plaincopy

  1. //发送端
  2. _sendSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];
  3. [_sendSocket bindToPort:6789 error:nil];

2, 发送  ,  里面的参数 需要指定 发送目的ip  端口  超时时间等

[objc] view plaincopy

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

时间: 2024-10-10 08:00:23

socket 通信机制的实现的相关文章

php socket通信机制实例说明与代码

php socket通信机制实例说明与代码----什么是socket 所谓socket一般也称作"套接字",用于描述ip地址和端口,是一个通讯链的句柄.使用程序一般经过"套接字"向network发出请求也许应对network请求.说白了就是一种通讯机制.它类似于银行,电信啊这一些部分的电话客服业务单元.您打电话的时候,那边会调设置一个人回答您的问题,客服业务单元就相当于socket的服务器端了,您这边呢就相当于用户端了,在和您通话完结前,假设有人在想找和您通话的那个

php 实例说明 socket通信机制

php 实例说明 socket通信机制 张映 发表于 2010-04-24 分类目录: php 一,socket是什么 什么是socket 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求.说白了就是一种通信机制.它类似于银行,电信啊这些部分的电话客服部门.你打电话的时候,那边会分配置一个人回答你的问题,客服部门就相当于socket的服务器端了,你这边呢就相当于客户端了,在和你

Socket通信机制(学习总结)

一.什么是Socket: 1.Socket是两个程序进行双向数据传输的网络通信的端点,由一个地址和一个端口来标识. 2.两种通信方式:有连接方式TCP.无连接方式UDP(用户数据报协议). 二.有连接方式TCP 1.通信双方在开始时必须进行一次连接过程(三次握手),建立一条通信链路.通信链路提供了可靠的,全双工的字节流服务. Socket是两个进程间通信链的端点,每个socket有两个流:一个输入流和输出流:其中: (1)只要向Socket的输出流写,一个进程就可以通过网络连接向其他进程发送数据

Socket进程通信机制

1.Socket通常称为"套接字",用于描述IP地址和端口,是一个通信链的句柄. 2.应用程序通过套接字向网络发出请求或者应答网络请求. 3.Socket既不是一个程序,也不是一种协议,其只是操作系统提供的通信层的一组抽象API. 4.进程通信的相关概念: 网间进程通信要解决的是不同主机进程间相互通信问题.为此,首先要解决的是网间进程标识问题.同一主机上,不同进程可用唯一进程号(Process ID)标识. (1)端口:网络中可以被命名和寻址的通信端口,是操作系统可分配的一种资源,用于

TCP及socket通信原理

一.网络互联模型 因特网在刚面世时,只有同一制造商生产的计算机才能彼此通信,制定网络互联模型的目的就是为异种的计算机互连提供一个共同的基础和标准框架,并为保持相关标准的一致性和兼容性提供共同的参考. 互联参考模型: OSI七层模型(Open System Interconnect):应用层.表示层.会话层.传输层.网络层.数据链路层.物理层 DoD四层模型:是OSI七层模型的浓缩版,包括 进程/应用层.主机到主机层.因特网层.网络接入层 以上两种模型是层次型的,分层模型的优点主要在于: ①将网络

C#のsocket通信

博主要做一个手机和电脑端(C#)通讯的程序,便览了网络上关乎socket的东西.但是接收文件的时候卡住了,怎么也接收不全.后来做了分片处理,如果分片,发送的时候就会有不同的socket(客户端开发不是我,故我不能控制人家怎么发),结果撞山了. 因为发送的时候for循环发,导致不是有重帧就是丢失,故进行了深入的研究. 1.Socket Socket包括Ip地址和端口号两部分,程序通过Socket来通信,Socket相当于操作系统的一个组件.Socket作为进程之间通信机制,通常也称作"套接字&qu

.net平台下C#socket通信(中)

本文主要讲述: 1.正常通信中握手建立 2.一对多的通信 3.发送接收数据格式转换 4.资源释放 5.开启并保持服务监听 1.握手建立正常的通信通道 项目需要通信的双方(假设是一个上位机.一个下位机)之间需要建立一个稳定的通道,以便进行通信.本项目中具体操作是:上位机作为服务器,下位机作为客户端,同时制定通信协议.上位机首先打开监听等待建立通道,下位机主动连接上位机后发送连接成功的信息到上位机,上位机根据通信协议发送数据到下位机,此时通道已经建立.但为了保险起见(同时遵循三次握手),客户端再次发

1、netlink 连接器 通信机制

使用netlink之前,先参考一下资料:http://www.ibm.com/developerworks/cn/linux/l-connector/ netlink通信机制介绍:资料来源 linux-4.8.13/Documentation/connector/connector.txt 2016-12-10 21:31:04 /*****************************************/Kernel Connector./***********************

第二十天 TCP 及socket通信原理、http协议及web服务、httpd核心配置详解

一.TCP及socket通信原理详解 二.http协议及web服务原理(一) 三.http协议及web服务原理(二) 四.httpd核心配置详解 1.tcp.udp是一种传输协议,实现进程地址标记,套接字是一个虚拟设备,用来表明主机上的某个进程      众所周知:0-1023:管理员才有权限使用,永久地分配给某应用使用(由IANA分配)      注册端口:1024-41951:只有一部分被注册,分配原则上非特别严格.      动态端口或私有端口:41952-65535:由内核分配临时端口,