2013-04-16 54 views
1

您如何知道在创建客户端时,什么是您在Java中为Socket对象选择的有效端口?例如,我试过Socket("localhost", 0)为Java Socket设置端口

但是,我最终抛出一个异常,因为无法绑定到端口。

我知道当端口为0时ServerSocket绑定到任何空闲端口。初始化套接字时客户端是否有类似的设置?

+1

客户端套接字侦听与服务器绑定的端口相同的端口。你反其道而行之。 ServerSockets会关联一个端口进行侦听,并且该端口不应当在此时使用,而不是该操作系统使用的那些端口之一。 – asgs

+1

如果您想在端口上侦听,则需要一个ServerSocket。 – MTilsted

+1

@asgs客户端套接字不“听”任何事情。他们*连接*到服务器端口。 – EJP

回答

2

客户端需要知道服务器正在侦听哪个端口。 What Is a Socket?有详细的解释,样本代码为Reading from and Writing to a Socket

+1

谢谢澄清何时“客户端还需要向服务器标识自身,以便绑定到在此连接期间使用的本地端口号,这通常由系统分配。”客户端上的这个端口不需要==服务器正在监听的端口对吗? – user1431282

+2

@ user1431282不,客户端绑定到的本地端口是自动的,不需要与服务器上使用的端口相同。我甚至不确定你是否可以控制这一点。 –

2

JavaDocs

public Socket(InetAddress address, int port) 
     throws IOException 

的字符串不是InetAddress。使用InetAddress.getByName()从字符串创建InetAddress(确保该字符串是网站的主机名)。


注意:你不能总是自由地选择使用哪个端口被保留,并认为禁地到用户应用程序,在某些系统上,可能会有范围。

1

该参数指定要连接的目标端口,而不是要绑定到的本地端口。本地端口自动分配,您不必担心。您确实需要知道要连接的服务器端口。使用零作为目标(连接)端口是没有意义的。