我正在开发简单的多人游戏,我正在使用自己的编码服务器(在C#中)。
在服务器上有TCPListener:
public void StartClientHandler()
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("ClientHandler started");
Console.ForegroundColor = ConsoleColor.White;
TcpListener server = null;
try
{
Int32 port = 4200;
IPAddress localAddr = IPAddress.Parse("127.0.0.1");
server = new TcpListener(localAddr, port);
server.Start();
while (true)
{
TcpClient client = server.AcceptTcpClient();
lobby.addToOnline(new Client(client,lobby));
}
}
catch (Exception e)
{
Console.WriteLine(e.StackTrace);
}
}
和unity客户端有TCPClient:
static public bool InitializeConnection()
{
try
{
client.Connect(ip, port);
if (client.Connected)
{
stream = client.GetStream();
Thread listener = new Thread(new ThreadStart(Listener));
listener.Start();
}
else Debug.Log("not connected:(");
return client.Connected;
}
catch (Exception e)
{
Debug.Log(e.StackTrace);
return false;
}
}
本地(使用" localhost"地址)一切都很完美! 但是,当我试图通过互联网或本地IP与朋友一起测试时,它会抛出这个例外:
在System.Net.Sockets.Socket.Connect(System.Net.EndPoint remoteEP,Boolean requireSocketPolicy)[0x00000] in:0 在System.Net.Sockets.Socket.Connect(System.Net.EndPoint remoteEP)[0x00000] in:0 在System.Net.Sockets.TcpClient.Connect(System.Net.IPEndPoint remote_end_point)[0x00000] in:0 在System.Net.Sockets.TcpClient.Connect(System.Net.IPAddress [] ipAddresses,Int32 port)[0x00000] in:0 UnityEngine.Debug:日志(对象)
哪里有问题?我读了一些关于它的问题,问题应该只出现在统一网络播放器中吗?但我正在构建它为Windows(EXE文件),但我也尝试将其构建到WEB GL播放器(由于线程有问题)
PS。我将路由器中的端口4200转发到我的服务器(用于通过互联网连接)
感谢您的帮助
答案 0 :(得分:1)
好的问题不在于政策。即使我转发了端口,我的服务器也没有收听打开的端口。
我不确定问题究竟是什么,但表单服务器代码我将ip格式127.0.0.1更改为0.0.0.0,端口类型从Int32更改为classic int。
这解决了我的问题。
如果有人能够解释我会很高兴:)