1.TCP使用

导入AsyncSocket资源文件夹,此文件是arc混编,加入库文件,如下图:

 #import "ViewController.h"
#import "AsyncSocket.h" @interface ViewController () <AsyncSocketDelegate>{ AsyncSocket *_recvSocket; //服务端
AsyncSocket *_sendSocket; //客户端 NSMutableArray *_socketArray; //数组用于记录socket } @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; //初始化数组
_socketArray = [[NSMutableArray alloc] init]; //服务端 负责监听有没有客户端连接
_recvSocket = [[AsyncSocket alloc] initWithDelegate:self]; //客户端
_sendSocket = [[AsyncSocket alloc] initWithDelegate:self]; //服务端开始监听 端口5678
[_recvSocket acceptOnPort: error:nil]; } //如果监听到有人连接,那么久会调用此方法
- (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket {
//保存服务端的新的套接字 (谁连接就保存谁)
[_socketArray addObject:newSocket];
//等待客户端发来的新消息 ,必须写 否则没有数据过来
[newSocket readDataWithTimeout:- tag:]; } //如果监听到客户端发送来的消息,就会执行此方法
- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag { NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; //拼接内容 显示
self.showTextView.text = [NSString stringWithFormat:@"%@%@:%@\n",self.showTextView.text,sock.connectedHost,str]; //继续监听客户端发送的消息
[sock readDataWithTimeout:- tag:];
} //连接成功后调用此方法
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port {
NSLog(@"连接成功");
} //端口连接调用此方法
- (void)onSocketDidDisconnect:(AsyncSocket *)sock { NSLog(@"断开连接");
} //当消息发送出去后调用此方法
- (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag {
NSLog(@"消息发送");
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} - (IBAction)connect:(id)sender {
//首先判断连接状态,如果连接了 先端口连接 然后重新连接
if (_sendSocket.isConnected) {
//如果连接了 断开连接
[_sendSocket disconnect];
}
//客户端连接host 注意:ip和端口别写错了 否则连接不上
[_sendSocket connectToHost:self.ipTextField.text onPort: error:nil]; } - (IBAction)send:(id)sender { NSData *data = [self.contentTextField.text dataUsingEncoding:NSUTF8StringEncoding];
//客户端发送数据
[_sendSocket writeData:data withTimeout: tag:]; self.showTextView.text = [NSString stringWithFormat:@"%@我说:%@\n",self.showTextView.text,self.contentTextField.text];
//清空发送输入空内容
self.contentTextField.text = @"";
}
@end

2.UDP使用

导入AsyncSocket资源文件夹,此文件是arc混编,加入库文件,操作如1中上图:

 #import "ViewController.h"
#import "AsyncUdpSocket.h" @interface ViewController () <AsyncUdpSocketDelegate>{ AsyncUdpSocket *_sendSocket; //客户端 发数据
AsyncUdpSocket *_recvSocket; //服务端 接数据
}
@property (weak, nonatomic) IBOutlet UITextField *ipTextField;
@property (weak, nonatomic) IBOutlet UITextField *contentTextField;
@property (weak, nonatomic) IBOutlet UITextView *showTextView;
- (IBAction)send:(id)sender;
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; //创建客户端 参数代理self
_sendSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];
//客户端绑定一个端口
[_sendSocket bindToPort: error:nil]; //创建服务端 参数代理self
_recvSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];
//服务端绑定端口
[_recvSocket bindToPort: error:nil]; //服务端开始等待接收数据(消息) -1代表一直等待 如果是正数 比如5 代表等待5秒 tag:标识
[_recvSocket receiveWithTimeout:- tag:]; } //服务端接收到数据会调用这个方法
- (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port {
/*
第一个参数:udpSocket
第二个参数:发送过来的内容 NSData类型
第三个参数:tag标识
第四个参数:host 这里是ip地址
第五个参数:端口号
*/ //将NSData类型转字符串
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"str:%@",str);
if (str) {
self.showTextView.text = [NSString stringWithFormat:@"%@%@:%@\n",self.showTextView.text,host,str];
}
//继续等待接收的数据,注:必须要加否则下次收到消息无法得到
[_recvSocket receiveWithTimeout:- tag:]; return YES;
} - (void)onUdpSocket:(AsyncUdpSocket *)sock didSendDataWithTag:(long)tag {
NSLog(@"UDP 发送消息");
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} - (IBAction)send:(id)sender { //取出self.contentTextField输入框的文本内容 然后转NSData类型
NSData *data = [self.contentTextField.text dataUsingEncoding:NSUTF8StringEncoding];
//客户端发送内容
/*
第一个参数:发送内容 NSData类型
第二个参数:ip地址 发给谁
第三个参数:端口号
第四个参数:超时时间 30秒 超过30秒后不会做任何处理
第五个参数:标识
*/ [_sendSocket sendData:data toHost:self.ipTextField.text port: withTimeout: tag:];
}
@end

TCP与UDP(实时通讯)的更多相关文章

  1. C++ 利用socket实现TCP,UDP网络通讯

    学习孙鑫老师的vc++深入浅出,有一段时间了,第一次接触socket说实话有点儿看不懂,第一次基本上是看他说一句我写一句完成的,第二次在看SOCKET多少有点儿感觉了,接下来我把利用SOCKET完成T ...

  2. python3实现unix域协议(tcp、udp)通讯

    socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIXDomain Socket.虽然网络socket也可用于同一台主机的进程间通讯(通过loopb ...

  3. lvs+keepalive实现双主模式(采用DR),同时实现TCP和UDP检测实现非web端的负载均衡,同时实现跨网段的通讯

    因为公司领导需要,需要把lvs备机也使用上,故! 使用双主,相互是主的同时也相互是备机.本人用nat测试发现RS无法实现负载均衡,故采用DR模式来实现非web端的负载均衡 lvs1: DIP 10.6 ...

  4. LWIP裸机环境下实现TCP与UDP通讯(转)

    源: LWIP裸机环境下实现TCP与UDP通讯

  5. Shell 脚本实现TCP/UDP协议通讯

    Shell 脚本实现TCP/UDP协议通讯 http://www.cnblogs.com/occult/archive/2012/12/25/2832183.html  

  6. onps栈使用说明(3)——tcp、udp通讯测试

    4. tcp客户端 在协议栈源码工程下,存在一个用vs2015建立的TcpServerForStackTesting工程.其运行在windows平台下,模拟实际应用场景下的tcp服务器.当tcp客户端 ...

  7. socket通讯,TCP,UDP,HTTP的区别

    socket编程有TCP和UDP, TCP:传送控制协议(Transmission Control Protocol) 传输控制协议TCP是TCP/IP协议栈中的传输层协议,它通过序列确认以及包重发机 ...

  8. [转]VB Winsock 控件TCP与UDP连接实例

    [-] 可能的用途 选择通讯协议 协议的设置 确定计算机的名称 TCP 连接初步 接受多个连接请求 UDP 初步 关于 Bind 方法   利用 WinSock 控件可以与远程计算机建立连接,并通过用 ...

  9. 【转】关于TCP和UDP协议消息保护边界的介绍

    在 socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发两端(客户端和服务器端)都要有一一成对的 socket,因此,发送端为了将多个发往接收端的包, ...

  10. TCP和UDP的保护消息边界机制

    在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.TCP的socket编程,收发两端都要有一一成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化 ...

随机推荐

  1. 0406-服务注册与发现-客户端feign-使用、配置、日志、timeout

    官方地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#spring-cloud-f ...

  2. vim批量注释与取消批量注释(转)

    方法一 块选择模式 插入注释: 用v进入virtual(可视化)模式(可以省略这一步) 用上下键选中需要注释的行数 按ctrl+v进入可视化块模式 按大写I进入插入模式,输入注释符‘#’或者是‘//’ ...

  3. python 中的 re.compile 函数(转)

    1. 使用re.compile re模块中包含一个重要函数是compile(pattern [, flags]) ,该函数根据包含的正则表达式的字符串创建模式对象.可以实现更有效率的匹配.在直接使用字 ...

  4. Bootstrap总结二

    参考我的博客:http://www.isedwardtang.com/2017/09/01/bootstrap-primer-2/

  5. Java开发资料汇编

    Java开发常识资料   一.Java基础JSE 核心基础(程序设计语言):        <Think in java> (参考阅读:<Core Java>JAVA2核心技术 ...

  6. ICMP与PING解析

    1.ICMP格式 ICMP是(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制消 ...

  7. iOS字符串处理

    拼接字符串 NSString* string; NSString* string1, string2; //方法1. string = [NSString initWithFormat:@" ...

  8. 关于 Content-Type:application/x-www-form-urlencoded 和 Content-Type:multipart/related(转)

    最近项目中用到的一个是用一个页面接收c程序post过来的一断字符串..总接收不到值... 我用C#写一个测试可以正常接收到值. 最后抓包比较 区别只是 Content-Type:application ...

  9. ggplot2 specific command

    # By default, the same scales are used for all panels. You can allow # scales to vary across the pan ...

  10. PAT1054. The Dominant Color (20)

    #include <iostream> #include <map> using namespace std; int n,m; map<int,int> imgM ...