2013-05-16 20 views
1

我创建了一个Java网络程序,并且每当我运行时(它并非始终发生),我得到一个虚拟号码,我的套接字接收到一些数字像-16956754(它总是相同的号码),我从来不会通过插座发送一个数字,以接近我收到的数字。难道是因为我正在使用我所使用的端口上的流量?我正在使用25565,这是一个相当普通的端口..网络 - 使用套接字并且有时会获得虚拟号码

如果是这样的话,你推荐哪个端口最少使用,以适应游戏应用?

+0

为什么你使用端口25565?它看起来像Minecraft服务器使用的端口,你的java程序与我的世界有什么关系? – Ramp

+0

发布一些代码片段让我们看看。如果不查看某些日志或代码,就无法真正了解问题所在。 – Ramp

回答

1

通过将端口更改为未使用的端口来解决。

+1

这不是一个解决方案。 – rolfl

0

如果它是你自己的应用程序并且想要选择一个端口,那么你应该选择一些不是'非常常见的端口'的东西。在这种情况下,它看起来像Minecraft服务器使用的端口。

+1

这不是一个真正的问题的答案.... – rolfl

+1

当然,这是一个答案。它会阻止来自Minecraft客户端的所有流量或任何它们。 +1 – EJP

2

任何网络服务器套接字(如您的应用程序)都会打开一个套接字(带有端口),并等待连接。套接字不知道连接来自哪里,以及套接字的客户端要做什么。无论什么应用,总会有是连接到服务器的客户端不是您所期望的。

在您的程序中,您需要创建一个协议,将客户端标识为服务器,作为您期望的客户端类型。如果客户端不是正确的应用程序,那么你应该放弃连接。

例如,邮件协议期望客户端发送EHLO或HELO提示,HTTP需要一个GET,POST或PUT等

在你的情况下,你可能选择这些会用来通过一个端口我的世界,但没有理由停止使用该端口,如果您可以识别对您很重要的客户端类型。

建立一个服务器,并希望唯一连接成为有效的客户端是不合理的。

更换端口只会使问题更少(可能),并且不会使问题消失。

+0

这是一个很好的理由停止使用该端口。 (a)该程序不适用于运行Minecraft服务器的主机,并且(b)它会打破Minecraft客户端:确实已经这样做了。该端口也被MySQL列出。 – EJP

+0

看,这就是整个问题,它没有注册到MySQL:https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt任何人都可以“蹲”在任何端口(就像OP会做的那样)。在编写服务时,您需要进行防御性编程,而不是期望一切都是完美的。这就是为什么程序应该允许你重新配置端口,如果需要的话,并知道如何处理行为不端的客户端。我已经表示,通过更换端口可以减少问题的发生,但这并不意味着您可以忽略最初的问题。 – rolfl