关于Socket与Unity之间的传输数据UDP协议《一》
一、UDP的优势
UDP相对于TCP的优势主要有三个方面的:
(1)UDP速度比TCP快。
由于UDP不需要先与对方建立连接,也不需要传输确认,因此其数据的传输速度比TCP快很多。对于一些着重传输性能而不是传输完整性的应用(网络音频播放、视频点播和网络会议等),使用UDP协议更加适合,因为它传输速度快,使通过网络播放的视频音质好、画面清晰。
(2)UDP有消息边界。
通过UDP协议进行传输的发送方对应用程序交下来的报文,在添加首部后就向下直接交付给IP层。既不拆分也不合并,而是保留这些报文的边界,所以使用UDP协议不需要像TCP那样考虑消息边界的问题,这样就使得UDP编程相对于TCP在接收到的数据处理方面要简单的多。(对于TCP消息边界的问题可以查看相关的文档,在这里我就不列出来了)
(3)UDP可以一对多传输(可恶的多播组!!!)
由于传输数据部建立连接,也就不需要维护连接状态,因此一台服务器可以同时向多个客户端发送相同的信息。利用UDP可以使用广播或者组播的方式同时向子网的所有客户端进程发送信息,广播和组播的介绍放到后面TCP编程中介绍。
二、使用UDP传输数据的思路
1、客户端
客户端可分为2大块 发送消息和监听消息
①、发送消息给服务器
首先定义一个socket使用udp协议,客户端需要绑定自己的ip;
然后定义一个监听端口来监听服务器发来的消息(可以写一个固定的服务器端口ip和端口号),
使用SendTo的方式来发送消息;
②、监听服务器的消息
客户端监听消息使用了线程;
使用的时候在Update实时监听服务器给发的消息
2、服务器端
服务端也分为2大块(发送消息和监听消息)
①、发送消息给单个客户端(也就是属于单播发送)
同客户端首先定义一个Socket使用udp协议,服务器也要绑定自己的ip;
由socket可得知哪个客户端给服务器发的消息,即便服务器使用socket回消息给客户端
②、发送消息给所有的客户端(属于多播组发送)
见下文。。。。。。。
③、监听各个客户端的消息
由于多个客户端给同一个服务器发消息,这时候需要使用到IPAddress.Any来监听局域网下的所有的客户端
三、测试结果
此时拿来了三台电脑,一个服务器,二个客户端测试,客户端给服务器发消息,服务器能收到没问题;
那么问题来了,服务器回消息的时候只是发给了最后一个连接服务器的客户端。
很明显,服务器并没有广播消息,只是给其中固定的一个客户端发送了消息,没有做到同步,见下文解决这个问题;