Unity中UDP传输坐标数据失败求助:发送正常接收无响应
Unity UDP通信接收无响应问题排查
我是Unity网络编程新手,尝试通过UDP在设备间传输坐标数据,编写了Sender和Receiver脚本分别挂载到游戏对象上。测试时发送端日志显示数据已发送,但接收端无任何响应。先在两台电脑间测试,通过控制台ping确认IP和端口正常,问题依旧;后改用localhost(127.0.0.1)本地测试,仍无报错但接收不到数据。
发送端代码
private UdpClient udpClient; private IPEndPoint remoteEndpoint; private string ipAdress = "127.0.0.1"; private int port = 5000; private void Start() { udpClient = new UdpClient(); remoteEndpoint = new IPEndPoint(IPAddress.Parse(ipAdress), port); } private void Update() { if (Input.GetKeyDown(KeyCode.Space)) { Debug.Log("Key is pressed"); Vector3 coordinates = new Vector3(1.0f, 2.0f, 3.0f); string coordinatesString = coordinates.ToString(); byte[] data = System.Text.Encoding.ASCII.GetBytes(coordinatesString); udpClient.Send(data, data.Length, remoteEndpoint); Debug.Log("Data sent: " + data); } }
接收端代码
private UdpClient udpClient; private IPEndPoint localEndpoint; private string ipAdress = "127.0.0.1"; private int port = 5001; private void Start() { udpClient = new UdpClient(); localEndpoint = new IPEndPoint(IPAddress.Parse(ipAdress), port); } private void Update() { if (udpClient.Available > 0) { Debug.Log("Client available"); byte[] receivedData = udpClient.Receive(ref localEndpoint); string receivedMessage = System.Text.Encoding.ASCII.GetString(receivedData); Debug.Log("Received data" + receivedMessage); } }
控制台仅显示发送端的"Key is pressed"和"Data sent: "日志,接收端无任何相关日志输出,请求帮忙排查代码问题。
问题排查与修复
1. 端口不匹配
发送端指定的目标端口是5000,但接收端监听的是5001,两者端口不一致导致数据无法送达。需要将两端的端口统一,比如都设为5000。
2. 接收端未绑定监听端口
接收端的UdpClient仅初始化了IPEndPoint,但没有调用Bind方法绑定到指定端口,因此无法在该端口上监听UDP数据。必须在Start方法中完成端口绑定。
修改后的接收端代码
private UdpClient udpClient; private IPEndPoint localEndpoint; private string ipAdress = "127.0.0.1"; private int port = 5000; // 和发送端端口统一 private void Start() { localEndpoint = new IPEndPoint(IPAddress.Parse(ipAdress), port); udpClient = new UdpClient(localEndpoint); // 初始化时直接绑定,也可单独调用udpClient.Bind(localEndpoint) } private void Update() { if (udpClient.Available > 0) { Debug.Log("Client available"); byte[] receivedData = udpClient.Receive(ref localEndpoint); string receivedMessage = System.Text.Encoding.ASCII.GetString(receivedData); Debug.Log("Received data: " + receivedMessage); } }
修改后的发送端代码(仅端口确认,其他无需改动)
private int port = 5000; // 确保和接收端端口一致
额外注意事项
- 若在两台不同电脑测试,发送端的
ipAdress需要改为接收端电脑的实际IP地址,而非127.0.0.1。 - UDP是无连接协议,发送端无需提前建立连接,但要确保目标IP和端口正确。
- 可以在接收端的
Start方法中添加Debug.Log($"Listening on {localEndpoint}")确认监听状态。
内容的提问来源于stack exchange,提问作者kirsal
相关产品推荐
相关产品推荐

