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 代码。
我正在研究两台 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 代码。