C# UDP接收不同端口的数据报文

本文介绍在Unity环境中,通过C#实现UDP通信的C/S架构。服务端利用多线程分别接收两个不同端口客户端发送的Kinect V2人体数据,数据格式为ClientID|index|PosLeft|Left_S|PosRight|Right_S|ACTION...。接收到的数据被存储到队列并在Update中处理,以控制服务端显示。
摘要由CSDN通过智能技术生成

在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[1024]; //接收的数据,必须为字节
	byte[] recvData2=new byte[1024]; //接收的数据,必须为字节
	byte[] sendData=new byte[1024]; //发送的数据,必须为字节
	int recvLen,recvLen2; //接收的数据长度
	Thread connectThread,connectThread2; //连接线程
    int[] WaveCounts = new int[2];
    int[] TPoseCounts = new int[2];
	public Queue<string> queueClient1 = new Queue<string>();
	public Queue<string> queueClient2 = new Queue<string>();

	private System.Object thisLock = new System.Object ();


	//初始化
	public	void InitSocket()
	{
		//定义侦听端口,侦听任何IP
		ipEnd=new IPEndPoint(IPAddress.Any,2000);
		//定义套接字类型,在主线程中定义
		socket=new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
		//服务端需要绑定ip
		try{
		socket.Bind(ipEnd);
		}
		catch (System.Exception ex) 
		{
			socket.Close ();
			Debug.LogError(ex.Message + "\n" + ex.StackTra
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值