java – Socket是否会打开另一个线程?它会返回一些东西吗?

在客户端应用程序中,我调用新的Socket(serverIP,serverPort).因此,客户端应用程序向服务器应用程序发送请求以打开套接字.它会启动一个新线程吗?我的意思是以下哪一项是正确的?

>客户端应用程序发送请求并立即开始执行以下命令(不等待答案).
>客户端发送请求并等待答案.获得答案后,​​客户端应用程序将继续执行以下命令.

对我来说,第二种情况似乎更为现实和合乎逻辑.但是,我不明白如果服务器没有打开套接字会发生什么,并且它没有说它“不想”打开第二个(如果服务器不存在或网络坏了就会发生).在这种情况下会发生什么?服务器会永远等待吗?

通常,客户端知道它对套接字的请求的结果是很好的.例如,我可以想象以下情况:

>套接字由服务器打开.
>服务器拒绝打开套接字.所以,服务器存在,它得到了客户端的请求,但它说“不”.
>服务器没有响应.

我知道新的Socket(serverIP,serverPort)不会“返回”这种信息.但它抛出异常.其中一个是“UnkownHostException”.什么时候抛出?当服务器暂时没有响应时(多长时间)?

添加:

我刚刚发现抛出了UnknownHostException,表明无法确定主机的IP地址.因此,它与上述情况无关(服务器没有响应,服务器拒绝打开套接字).

最佳答案 new Socket(host,port)不会打开新线程.它启动一个同步tcp连接建立.在某些默认超时后,这可能需要几秒钟或超时.

如果服务器拒绝接受连接,或者客户端无法解析主机的IP或访问服务器(无法访问),则会引发相应的异常.

(如果要控制超时,请使用默认构造函数和connect(SocketAddress endpoint,int timeout)方法).

点赞