Android Java ServerSocket 端口号不是它应该是的

Posted

技术标签:

【中文标题】Android Java ServerSocket 端口号不是它应该是的【英文标题】:Android Java ServerSocket port number is not what it's supposed to be 【发布时间】:2012-03-17 11:09:28 【问题描述】:

您好,我正在做 android 开发,在使用 socket API 时发现了一些奇怪的东西。

在我创建的套接字之间

ServerSocket server = new ServerSocket(4444);
Socket client = server.accept();

client.getPort();

不是 4444。

由于端口号几乎是随机的,客户端无法与服务器应用程序通信。 任何信息或建议都会有所帮助!

完整的示例项目在这里。

http://vext.eclipselabs.org.codespot.com/files/SocketTest.zip

提前致谢!

【问题讨论】:

这个安卓怎么样?如果你在手机上运行这个,你会得到一个 BindAddress 错误。 Non sequitur. 客户端端口号确实几乎是随机的,但它并不遵循客户端无法与服务器通信的情况。这就是 TCP 的工作原理。显然,服务器也知道客户端端口和 IP 地址。这里没有问题要解决。 【参考方案1】:

引用自Head First Java

【讨论】:

@user1165390,很高兴为您提供帮助,如果您认为有帮助,请考虑接受。【参考方案2】:

来自Java Docs of Socket class 公共 int getPort() 返回此套接字连接到的远程端口。 回报: 此套接字连接到的远程端口号,如果套接字尚未连接,则为 0。

尝试调用 getLocalPort()

【讨论】:

【参考方案3】:

当客户端套接字到服务器套接字时,它将在客户端机器上使用一个随机的空端口(未使用的端口)..但是这个客户端应该连接到服务器的特定端口......

当你指定服务器套接字端口时;你正在监听这个端口。并且在接受新的套接字连接时,您应该为连接的客户端创建一个特定的引用并继续侦听传入的新连接;然后使用此引用与您的客户端连接进行通信。

【讨论】:

以上是关于Android Java ServerSocket 端口号不是它应该是的的主要内容,如果未能解决你的问题,请参考以下文章

怎么创建一个serversocket

Android上实现TCP服务端

Java网络编程精解之ServerSocket用法详解一

Java - 无法与 ServerSocket 连接

java中用serverSocket类如何向指定IP的客户端发送数据

java ServerSocket