我一直在尝试进行简单的联网,在其中我可以将消息从一台设备发送到另一台设备。我最初的想法是“使用统一多人游戏功能我需要付费吗?” 因此我发现这篇文章看起来很清晰,直接解释了我将如何进行联网以代表我维持零成本。经过进一步的搜索,我发现了一些统一的文档,这些文档似乎在解释如何以与上一篇文章中描述的相同的方式简单地进行网络连接,而忽略了我想要的简单低级API消息发送。[重要说明:我使用C#工作]
但是,我似乎在这次探索之旅中停下来了,因为我没有找到更多文章或视频来指导我并回答我仍然对这是如何工作的问题。
因此,今天我问:
A-您是否知道其他任何文章或视频可以指导我进行此操作?
B-我的方向完全错误吗?
C-您能回答以下我的任何关键问题吗?
在创建服务器时,即在下面时,我应该监听哪个端口,并且应该担心“端口转发”,这是我经常不屑一顾的短语。
NetworkServer.Listen(4444);
在创建客户端时,即在下面时,我应该使用哪个IP地址?我想这是客户端设备的设备,但是我怎么知道它是什么?
myClient.Connect(“ 127.0.0.1”,4444);
我如何获得2台设备进行连接,我的想法是使任何设备默认情况下都成为客户端,然后以某种方式“检查服务器”,如果没有,它将使用本地客户端创建自己的服务器以供客户端连接,不会有多余的服务器...?
非常感谢您阅读我的问题,希望它看起来很清楚,请检查链接,这样对您有意义。任何答案都将受到极大的赞赏,这样我就可以继续我的理解之旅。
- 我应该监听哪个端口,我应该担心“端口转发”这个词,我经常看到这个词。
这取决于你。您可以使用所需的任何端口。正确的方法是10
为游戏选择1
端口,然后选择端口作为默认端口。例如,让我们从port10000
到选择10010
。让我们将port10000
设置为默认的游戏端口。
如果您尝试使用默认端口(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
。我在这里进一步解释了这一点。
了解什么是广播很重要,但是Unity通过创建广播API NetworkDiscovery使广播变得更简单。
要知道要连接到哪个IP地址,只需NetworkDiscovery.StartAsServer()
在Start()
函数中的服务器端调用即可。
在您的客户端上,调用,NetworkDiscovery.StartAsClient()
然后实现该OnReceivedBroadcast(string fromAddress, string data);
功能。当找到服务器时,OnReceivedBroadcast(string fromAddress,string data); 将被调用,然后您可以使用返回的fromAddress
值连接到服务器。
这也应该回答您的#3问题。另外,很高兴您发现我的其他答案很有用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句