UnitySocket异步通信

本文介绍了Unity中使用Socket进行异步通信的方法,包括TCP和UDP协议的选择。服务端通过BeginAccept接受客户端连接,BeginReceive接收数据,并在回调中递归调用自身实现模拟线程。客户端使用TcpClient进行连接,BeginRead接收数据,BeginWrite发送数据。异步通信使得服务端能同时处理多个客户端连接,提高了效率。
摘要由CSDN通过智能技术生成

Socket 套接字 一个ip和一个端口组成一个Socket 属C/S架构 具有长连接和实时性(强联网) 客户端服务端都用Socket来声明 Socket类型又分为多种 常用有Stream流传输和Dgram打包传输 流传输对应协议类型的TCP(传输控制协议)Dgram打包传输对应协议类型的UDP(用户数据报协议)
TCP和UDP都是传输协议 双方通信时都需要端口的开放
TCP是可靠的传输 收发数据前先建立连接 UDP是不可靠的传输 不与对方建立连接 直接把数据报发出去
传输端口使用1024-65535
服务端和客户端都要创建Socket和绑定IP和端口 服务器用Bind绑定和Listen设置监听数量 通过Accept方法获取客户端并用Receive方法接收数据到缓冲区(byte数组) 解析消息头 switch/case分发执行不同操作 客户端封装数据压入字节流Send发送给已建立连接的服务端
异步(不用线程)Socket通信 定义字典存储一个ip对应一个Socket 服务端绑定ip和端口 开始连接BeginAccept 生成带IAsyncResult参数的回调函数 函数中存储ip对应的Socket 客户端开始接收数据BeginReceive 函数结束前递归调用BeginAccept 模拟线程 接收数据的回调函数中 接收完数据后放入缓冲区字节数组中 转换为字符串输出 回调函数结束之前 调用开始接收BeginReceive递归调用回调函数 模拟线程;发送消息时 将字符串转为字节数组用BeginSend开始发送 封装开始发送的回调函数 函数中输出向客户端发送的消息 服务端向所有与自己建立连接的客户端发消息时 遍历字典 调用发送消息的函数
客户端 定义TCPClient 接收队列和发送队列 以及字节数组用作缓冲区 首先client开始连接BeginConnect 成功建立连接之后可收发消息 接收消息时使用NetWorkStream开始读数据BeginRead 封装读数据的回调函数 发数据时压入队列 并在FixedUpdate中实时监测发送队列的长度 若压入数据则开始写入BeginWrite 发送数据<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值