我应该听什么端口,我应该担心的港口 转发“,这是一个短语我经常看到卡住的。
这是给你的。你可以使用任何你想要的端口。正确的做法是为您的游戏选择约10端口,然后选择1端口作为默认端口。例如,我们从端口10000至10010中选择。让我们将端口10000作为您的默认游戏端口。
如果你试图连接到默认的(10000)与NetworkServer.Listen(10000)但还有另一种软件使用的端口或端口不可用,NetworkServer.Listen将返回false,并抛出以下异常:
无法在IP {*}和端口{10000}上打开套接字;支票,请您 网络,最有可能的端口已被占用的
当这种情况发生,你可以尝试下口,旁边另一端口,另外一个,直到你达到你的最大游戏端口是10010。
另外,在您的游戏说明中,您可以指示玩家在连接到其他玩家时遇到问题时打开端口10000至10010。
实现(阅读在代码注释):
int minPort = 10000;
int maxPort = 10010;
int defaultPort = 10000;
//Creates a server then returns the port the server is created with. Returns -1 if server is not created
int createServer()
{
int serverPort = -1;
//Connect to default port
bool serverCreated = NetworkServer.Listen(defaultPort);
if (serverCreated)
{
serverPort = defaultPort;
Debug.Log("Server Created with deafault port");
}
else
{
Debug.Log("Failed to create with the default port");
//Try to create server with other port from min to max except the default port which we trid already
for (int tempPort = minPort; tempPort <= maxPort; tempPort++)
{
//Skip the default port since we have already tried it
if (tempPort != defaultPort)
{
//Exit loop if successfully create a server
if (NetworkServer.Listen(tempPort))
{
serverPort = tempPort;
break;
}
//If this is the max port and server is not still created, show, failed to create server error
if (tempPort == maxPort)
{
Debug.LogError("Failed to create server");
}
}
}
}
return serverPort;
}
用法:
void Start()
{
int serverPort = createServer();
if (serverPort != -1)
{
Debug.Log("Server created on port : " + serverPort);
}
else
{
Debug.Log("Failed to create Server");
}
}
当创建客户端,即,低于,哪个IP地址我应该使用吗?我认为这是客户的设备,但我怎么知道它是什么 是?
在过去,您必须使用UDP将您的IP广播到网络。简而言之,您可以从您的计算机上获得您的IP地址,然后将其广播到255.255.255.255。
您也可以广播到您的IP地址的修改版本。我们假设你的ip是192.168.1.13,你应该删除13(最后一个八位字节)并用255替换它,然后将你的ip广播到192.168.1.255。我解释了这更多here。
通过创建广播API NetworkDiscovery,了解广播是什么,但Unity使它更简单很重要。
要知道要连接到哪个IP地址,只需在Start()函数中在服务器端调用NetworkDiscovery.StartAsServer()即可。
在您的客户端,请致电NetworkDiscovery.StartAsClient(),然后执行OnReceivedBroadcast(string fromAddress, string data);函数。当找到服务器OnReceivedBroadcast(string fromAddress,string data);将被调用,然后您可以使用返回的fromAddress值连接到您的服务器。