TCP UDP 套接字
TCP是全双工的,安全的,不过效率低,内存消耗大
UDP是半双工的,不安全,不过效率高,内存消耗小
在工程中导入三方库AsyncSocket
TCP是需要三次握手的
1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 _mArray = [[NSMutableArray alloc] init]; 5 //客户端 6 _clientSocket = [[AsyncSocket alloc] initWithDelegate:self]; 7 //服务端 8 _serverSocket = [[AsyncSocket alloc] initWithDelegate:self]; 9 10 //监听有没有客户端连接 11 [_serverSocket acceptOnPort:5678 error:nil]; 12 } 13 14 15 //监听到客户端连接 16 - (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket 17 { 18 [_mArray addObject:newSocket]; 19 //监听客户端发送消息 20 [newSocket readDataWithTimeout:-1 tag:0];//Timeout连接超时,-1指的是永远不超时,永远等待 21 22 23 } 24 25 //当监听到克华短发送了消息 26 - (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag 27 { 28 NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 29 if(_textView.text.length >= 100 ){ 30 _textView.text = @""; 31 } 32 //消息显示到textView上面 sock.connectedHost客户端地址 33 _textView.text = [NSString stringWithFormat:@"%@%@:%@\n",_textView.text,sock.connectedHost,str]; 34 //继续监听客户端发送消息 35 [sock readDataWithTimeout:-1 tag:0];//一直监听,递归 36 } 37 38 //连接 39 - (void)conToHost:(id)sender 40 { 41 //如果已经连接,先断开 42 if(_clientSocket.isConnected){ 43 [_clientSocket disconnect]; 44 } 45 //连接服务端 46 [_clientSocket connectToHost:_ipField.text onPort:5678 withTimeout:20 error:nil]; 47 } 48 49 50 //连接成功 51 - (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port 52 { 53 NSLog(@"连接成功"); 54 } 55 56 57 //发送 58 - (void)sendText:(id)sender 59 { 60 NSData *data = [_sendField.text dataUsingEncoding:NSUTF8StringEncoding]; 61 _sendField.text = @""; 62 [_clientSocket writeData:data withTimeout:20 tag:0]; 63 64 } 65 66 //发送成功 67 - (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag 68 { 69 NSLog(@"发送成功"); 70 } 71 72 @end
UDP相对于TCP是简单的,不管服务器端在不在,直接发送信息
1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 //发送端 5 _sendSocket = [[AsyncUdpSocket alloc] initWithDelegate:self]; 6 //绑定端口 7 [_sendSocket bindToPort:5555 error:nil]; 8 9 //接收端 10 _recvSocket = [[AsyncUdpSocket alloc] initWithDelegate:self]; 11 [_recvSocket bindToPort:6666 error:nil]; 12 13 //监听有没有人发送消息 14 [_recvSocket receiveWithTimeout:-1 tag:0]; 15 } 16 17 18 19 //接收端,监听到有人给它发消息 20 - (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port 21 { 22 //解析xml 23 GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil]; 24 //解析message 25 GDataXMLElement *messageEle = doc.rootElement; 26 //解析name 27 GDataXMLElement *nameEle = [[messageEle elementsForName:@"name"] lastObject]; 28 //解析text 29 GDataXMLElement *textEle = [[messageEle elementsForName:@"text"] lastObject]; 30 //显示出来 31 if(_textView.text.length >=100){ 32 _textView.text = @""; 33 } 34 _textView.text = [NSString stringWithFormat:@"%@%@:%@\n",_textView.text,nameEle.stringValue,textEle.stringValue]; 35 //继续监听 36 [_recvSocket receiveWithTimeout:-1 tag:0]; 37 return YES; 38 } 39 40 41 //发送端 42 - (void)sendText:(id)sender 43 { 44 /* 45 <?xml> 46 <message> 47 <name>...</name> 48 <text>.....</text> 49 </message> 50 */ 51 GDataXMLElement *messageEle = [GDataXMLElement elementWithName:@"message"]; 52 GDataXMLElement *nameEle = [GDataXMLElement elementWithName:@"name" stringValue:@"iOS"]; 53 GDataXMLElement *textEle = [GDataXMLElement elementWithName:@"text" stringValue:_sendField.text]; 54 [messageEle addChild:nameEle]; 55 [messageEle addChild:textEle]; 56 57 //加声明 58 GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithRootElement:messageEle]; 59 [doc setCharacterEncoding:@"utf-8"];//编码格式 60 61 //发送消息 62 [_sendSocket sendData:doc.XMLData toHost:_ipField.text port:6666 withTimeout:20 tag:0]; 63 } 64 65 //发送消息后 66 - (void)onUdpSocket:(AsyncUdpSocket *)sock didSendDataWithTag:(long)tag 67 { 68 69 } 70 71 72 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 73 { 74 [self.view endEditing:YES]; 75 } 76 77 78 @end
转载于:https://www.cnblogs.com/Angelone/p/4399096.html
TCP UDP 套接字相关推荐
- TCP/UDP套接字网络协议
TCP服务端(以字节串传输信息) import socket 1.创建套接字 sockfd = socket.socket(socket_family = AF_INET,socket_type = ...
- 网络编程---TCP/UDP套接字编程原理
本篇介绍的是Linux下的网络编程,故有些接口是不适用于Windows的,但是具体概念和实现方法是大体一致的 本篇重在讲解原理,具体实现请戳这里->UDP套接字编程实现 介绍 网络编程套接字(s ...
- 计网实验原理-TCP/UDP套接字编程
计算机网络自顶向下结构--第7版 第二章实验,套接字编程 代码运行环境:window10,python 3.8.对于书上代码略作修改. 进程与计算机网络之间的接口 多数应用程序是由通信进程队组成的,每 ...
- TCP/UDP 套接字总结
参考 <<TCP/IP网络编程>> 伊圣雨 套接字简介 套接字可以连接为计算机为了通信准备的一种标准接口,这个接口函数与操作系统联系紧密,是实现计算机之间通信的重要基础. TC ...
- Day09: socket网络编程-OSI七层协议,tcp/udp套接字,tcp粘包问题,socketserver
今日内容:socket网络编程 1.OSI七层协议 2.基于tcp协议的套接字通信 3.模拟ssh远程执行命令 4.tcp的粘包问题及解决方案 5.基于udp协 ...
- tcp/ip 协议栈Linux内核源码分析15 udp套接字接收流程二
内核版本:3.4.39 上篇我们分析了UDP套接字如何接收数据的流程,最终它是在内核套接字的接收队列里取出报文,剩下的问题就是谁会去写入这个队列,当然,这部分工作由内核来完成,本篇剩下的文章主要分析内 ...
- tcp/ip 协议栈Linux内核源码分析14 udp套接字接收流程一
内核版本:3.4.39 前面两篇文章分析了UDP套接字从应用层发送数据到内核层的处理流程,这里继续分析相反的流程,看看数据是怎么从内核送到应用层的. 与发送类似,内核也提供了多个接收数据的系统调用接口 ...
- TCP和UDP套接字编程
一.Socket简单介绍 如果要在应用层调用传输层的服务,进行相关程序的设计,就要涉及到套接字编程.套接字也称之为Socket,本质上它就是利用传输层提供的一系列Api来进行网络应用程序的设计. 网络 ...
- LINUX 下tcp 和 udp 套接字收发缓冲区的大小决定规则 .
const int udp_recvbufsize = 384 * 1024 ; int result = ::setsockopt(m_hSocket, SOL_SOCKET, SO_RCVBUF, ...
- Python之网络编程(TCP套接字与UDP套接字)
文章目录 基于tcp的套接字 实现目标 tcp服务端源码 tcp客户端源码 tcp效果实现 基于udp的套接字 udp作用介绍 udp服务端源码 udp客户端源码 udp效果实现 用udp实现一个时间 ...
最新文章
- Mac OS X 下Node.js开发环境的搭建
- Bitmap 索引 vs. B-tree 索引:如何选择以及何时使用?——2-5
- hyper-v NAT网络
- 文件系统服务器管理论文,Linux管理磁盘和文件系统
- SAP Spartacus 启动时 Chrome 里观察到的 product.js
- opengl层次建模_层次建模简介
- 用.NET模拟天体运动
- 支付宝:“我的小程序”用户访问量一周激增165%
- PAT1060. 爱丁顿数
- 学习心得_【数字建行大学学习心得】第二期
- 矩池云利用ipykernel为JupyterLab添加kernel以及展示出来
- matlab实心黑点怎么活,matlab画实心圆点
- MK60单片机开发环境-IAR Embedded Workbench的搭建
- eclipse语言包安装后如何进行英语中文切换
- 有道单词本添加js实现自动阅读单词
- 【sketchup 2021】草图大师图像输出与渲染之Enscape渲染(优秀的实时渲染软件)的安装与软件说明,并在sketchup软件中调出Enscape软件和使用。
- NSA机密文件泄密者如何暴露身份
- 服务器驱动器输入信号,基于GaN器件的驱动设计方案
- 霍志刚中国科学院计算机,曙光4000系列高性能计算机研究集体
- IDA反汇编/反编译静态分析iOS模拟器程序(六)交叉引用