Unity 中的 TCP 连接

TCP connection in Unity

我正在研究两台 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";
        }
    }

    // ....
}

非常感谢您的宝贵意见

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