共 1 篇文章

标签:c#udp源端口目的端口不同 (c udp并发服务器代码)

c#udp源端口目的端口不同 (c udp并发服务器代码)

c#udp源端口目的端口不同在于UDP在IP数据报服务之上增加了两个最基本的服务:复用和分用 + 差错检测,常用于一次性传输较少数据的网络应用,如DNS 、SNMP等,因为对于这些应用,若采用TCP,则将为连接创建、维护、拆除带来不小的开销,常用于多媒体应用(IP、视频会议、流媒体等)因为可靠传输对于这些应用来说不是最重要的,TCP的拥塞控制会导致数据出现较大的延迟,这是大忌!不保证可靠交付,但并不意味着应用对数据的要求是不可靠的,所有维护可靠性的工作可由用户在应用层完成面向报文的,报文不可分割,是UDP数据报处理的最小单位 2.UDP的优点 ·无需建立连接,不会引入建立连接的时延 DNS如果运行在TCP上,速度会慢很多;因此使用UDP,HTTP使用TCP是因为对于基于文本数据的web网页,可靠性是至关重要的 ·无连接状态,不维护连接状态,一般能支持更多的活动客户机,TCP需要在端系统中维护连接状态(包括接收和发送缓存、拥塞控制参数和序号与确认号的参数) ·分组首部开销小TCP有20B的首部开销,UDP有8B的开销,没有拥塞控制,应用层能更好地控制要发送的数哗裂据和发送时间 UDP没有拥塞控制,因此网络中的拥塞不会影响主机的发送效率 ·支持一对一、一对多、多对一和多对乱斗闭多的交互通信。3.UDP的首部格式 UDP数据报包含两部分:UDP首部和用户数据 UDP首部(8B),由4个字段组成,每个字段长度为2B,源端口号:在需要对方回信时选用,不需要时全0,目的端口号:这在终点交付报文时销握必须使用到UDP长度(8B):UDP数据报的长度(包括首部和数据),其最小值是8(仅有首部),4.校验和:检测UDP数据报中是否有错,有错就丢弃。该字段可选,不使用时全0,当传输层从IP层收到UDP数据报时,就根据首部中的目的端口,把UDP数据报通过相应的端口上交给应用进程。祝你生活愉快谢谢提问? 在unity中使用UDP进行数据的交互,建立C/S模式,两个客户端和一个服务端。两个客户端使用不同的端口往服务端发送数据,服务端根据收到的数据进行处理和判断,控制服务端的显示。 说明:两个客户端连接的是Kinect V2,需要将检测到的人体的数据信息发送到服务端进行系统数据的整体显示。指定的消息协议是ClientID|index|PosLeft|Left_S|PosRight|Right_S|ACTION| ClientID|index|PosLeft|Left_S|PosRight|Right_S|ACTION| … 这是客户端根据检测到人体的数量向服务端发送的数据格式。 服务端:使用两个线程用于接收两个客户端的数据,将收到的数据添加到Queue中。在需要显示数据的Update中从Queue中取出数据进行缺袜处理控制。 这里服务端的接收数据脚本直接上代码: using UnityEngine; using System.Collections; //引入库 using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Collections.Generic; public class UdpHelpHandler : MonoBehaviour { //以下默认都是私有的成员 Socket socket,socket2; //目标socket EndPoint clientEnd; //客户端 IPEndPoint ipEnd,ipEnd2; //侦听端口 string recvStr,recvStr2; //接收的字符串 string sendStr; //发送的字符串 byte recvData=new byte; //接收的数据,必须为字节 byte recvData2=new byte; //接收的数据,必须为字节 byte sendData=new byte; //发送的数据,必须为字节 int recvLen,recvLen2; //接收的数据长度 Thread connectThread,connectThread2; //连接线程 int WaveCounts = new int; int TPoseCounts = new int; public Queue queueClient1 = new Queue(); public Queue queueClient2 = new Queue(); private System.Object thisLock = new System.Object (); //初始搜此化 publicvoid InitSocket() { //定义侦听端口,侦听任何IP ipEnd=new IPEndPoint(IPAddress.Any,2023); //定义世扮迅套接字类型,在主线程中定义 socket=new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp); //服务端需要绑定ip try{ socket.Bind(ipEnd); } catch...

技术分享