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

标题基于SpringBoot的马术俱乐部管理系统设计实现AI更换标题第1章引言介绍马术俱乐部管理系统的研究背景、意义、国内外研究现状、论文方法及创新点。1.1研究背景意义阐述马术俱乐部管理系统对提升俱乐部管理效率的重要性。1.2国内外研究现状分析国内外马术俱乐部管理系统的发展现状及存在的问题。1.3研究方法以及创新点概述本文采用的研究方法,包括SpringBoot框架的应用,以及系统的创新点。第2章相关理论总结和评述马术俱乐部管理系统相关的现有理论。2.1SpringBoot框架理论介绍SpringBoot框架的基本原理、特点及其在Web开发中的应用。2.2数据库设计理论阐述数据库设计的基本原则、方法以及在管理系统中的应用。2.3马术俱乐部管理理论概述马术俱乐部管理的基本理论,包括会员管理、课程安排等。第3章系统设计详细描述马术俱乐部管理系统的设计方案,包括架构设计、功能模块设计等。3.1系统架构设计给出系统的整体架构,包括前端、后端和数据库的交互方式。3.2功能模块设计详细介绍系统的各个功能模块,如会员管理、课程管理、预约管理等。3.3数据库设计阐述数据库的设计方案,包括表结构、字段设计以及数据关系。第4章系统实现介绍马术俱乐部管理系统的实现过程,包括开发环境、编码实现等。4.1开发环境搭建介绍系统开发所需的环境,包括操作系统、开发工具等。4.2编码实现详细介绍系统各个功能模块的编码实现过程。4.3系统测试调试阐述系统的测试方法、测试用例以及调试过程。第5章系统应用分析呈现马术俱乐部管理系统的应用效果,并进行性能分析。5.1系统应用情况介绍系统在马术俱乐部中的实际应用情况。5.2系统性能分析从响应时间、并发处理能力等方面对系统性能进行分析。5.3用户反馈改进收集用户反馈,提出系统改进建议。第6章结论展望总结马术俱乐部管理系统的设计实现成果,并展望未来的研究
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值