【问题标题】:TCP connection in UnityUnity 中的 TCP 连接
【发布时间】:2021-05-26 19:51:30
【问题描述】:

我正在处理两台 Windows10 笔记本电脑之间的 TCP 连接。我使用 Unity 2019.2.17f1 制作了应用程序。但是,TCP 连接不起作用。客户端应用程序仅在我不运行服务器应用程序时才连接到服务器(虽然这很奇怪...),否则客户端应用程序会显示消息“找不到服务器...”。

我把部分代码放在这里。 客户程序:

public class TCPClientManager : MonoBehaviour
    {
    // ip address(server) and port number
    public string ipAddress = "192.0.0.1";
    public int port = 3000;

    private TcpClient m_tcpClient;
    private NetworkStream m_networkStream;
    private bool m_isConnection;

    private string message;

    void Start()
    {
        try
        {
            // connect to the server 
            m_tcpClient = new TcpClient(ipAddress, port);
            m_networkStream = m_tcpClient.GetStream();
            m_isConnection = true;
        }
        catch (SocketException)
        {
            m_isConnection = false;
            // show a error message
            // ...
        }
    }

    void OnGUI()
    {
        if (m_isConnection)
        {
            GUILayout.Label("server is not found...");
            return;
        }

        // some codes here
    }

    // some codes here
  }

服务器程序:

public class TCPServerManager : MonoBehaviour
{
    // ip address(server) and port number
    public string ipAddress = "192.0.0.1";
    public int port = 3000;

    private TcpListener m_tcpListener;
    private TcpClient m_tcpClient;
    private NetworkStream m_networkStream;
    private bool m_isConnection;

    private string message = string.Empty; 

    private void Awake()
    {
        Task.Run(() => OnProcess());
    }

    private void OnProcess()
    {
        var n_IpAddress = IPAddress.Parse(ipAddress);
        m_tcpListener = new TcpListener(n_IpAddress, port);
        m_tcpListener.Start();

        m_tcpClient = m_tcpListener.AcceptTcpClient();

        m_networkStream = m_tcpClient.GetStream();

        while (true)
        {
            var buffer = new byte[256];
            var count = m_networkStream.Read(buffer, 0, buffer.Length);

            if (count == 0)
            {
                OnDestroy();

                Task.Run(() => OnProcess());

                break;
            }

            message += Encoding.UTF8.GetString(buffer, 0, count) + "\n";
        }
    }

    // ....
}

非常感谢您的建议。

【问题讨论】:

    标签: windows unity3d networking tcp tcplistener


    【解决方案1】:

    我认为你反转了你的 m_isConnection 变量值。连接服务器后将其设置为 true,否则设置为 false。但是在 OnGUI 中,如果您找到了连接,那么您会打印一条错误消息并离开。这意味着只有在没有找到服务器的情况下才能在此处执行 //some code。

    【讨论】:

    • 是的,现在可以使用了。正如你所说,这只是因为错误的标志控制。 TCP连接也有效。非常感谢您的评论。
    猜你喜欢
    • 2020-03-17
    • 2021-02-17
    • 2022-01-16
    • 2018-10-21
    • 2021-10-24
    • 2015-05-02
    • 2019-02-25
    • 2012-11-11
    • 2011-11-03
    相关资源
    最近更新 更多