You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 17:58:30