首页 > 解决方案 > 如何正确使用 Unity Transport API?

问题描述

我正在尝试使用 Unitys 传输 api 建立网络通信。

网络连接正在运行,两个设备都可以通过NetworkDiscovery组件相互发送和接收广播。到现在为止还挺好。

现在,如果我尝试通过传输 API 发送数据,我会在发送设备上收到错误,而在接收端则没有。

public void Send()
{
    Connection = new NetworkConnection();
    var info = LobbyRenderer.GetSelectedHostInfo();
    Connection.Initialize(info.ipv4, 1, 1, new HostTopology(new ConnectionConfig(), 1));

    byte connectionError;
    websocketId = NetworkTransport.AddWebsocketHost(new HostTopology(new ConnectionConfig(), 1), 47774);
    connectionId = NetworkTransport.Connect(websocketId, info.ipv4, 47774, 0, out connectionError);

    byte sendError;
    byte[] bytes = new byte[2] { 1,1 };
    NetworkTransport.Send(websocketId, connectionId, 1, bytes, 2, out sendError);
}

connectionError 字节返回 4,sendError 字节返回 2。

统一控制台:

统一控制台

我很感激有关如何使这项工作的提示。

标签: c#unity3dnetworking

解决方案


我不确定是否是这种情况,但我在您的代码中看不到任何 QOS 通道,请尝试添加一个,您还必须在发送时提供 QOS 通道。

public void Send()
{
    Connection = new NetworkConnection();
    var info = LobbyRenderer.GetSelectedHostInfo();
    Connection.Initialize(info.ipv4, 1, 1, new HostTopology(new ConnectionConfig(), 1));

    byte connectionError;
    ConnectionConfig config = new ConnectionConfig();
    int myReliableChannelId  = config.AddChannel(QosType.Reliable);
    int myUnreliableChannelId = config.AddChannel(QosType.Unreliable);
    websocketId = NetworkTransport.AddWebsocketHost(new HostTopology(config, 1), 47774);
    connectionId = NetworkTransport.Connect(websocketId, info.ipv4, 47774, 0, out connectionError);

    byte sendError;
    byte[] bytes = new byte[2] { 1,1 };
    NetworkTransport.Send(websocketId, connectionId, myReliableChannelId, bytes, 2, out sendError);
}

推荐阅读