简单了解Sockets
Sockets:两个计算机应用程序之间逻辑链接的一个端点,是应用程序用来通过网络发送和接收数据的逻辑接口
- 是
IP地址和端口号
的组合 - 每个Socket都被分配了一个用于标识服务的特定端口号
- 基于连接的服务使用基于tcp的流Sockets
Java为客户端编程提供了java.net.Socket类
- 相反,
服务器端TCP/IP编程使用java.net.ServerSocket类
。 - 另一种类型的Socket是基于udp的数据报Sockets,用于无连接的服务。
Java为UDP操作提供了java.net.DatagramSocket
什么是“Connection Timed Out”
为了从客户端建立到服务器的连接,调用Socket构造函数,它实例化一个Socket对象
构造函数将远程主机地址和端口号作为输入参数。之后,它尝试根据给定的参数建立到远程主机的连接,该操作将阻塞所有其他进程,直到成功建立连接
-
然而,如果连接在一段时间后没有成功,程序会抛出一个ConnectionException
,并带有" connection timed out "消息
:java.net.ConnectException: Connection timed out: connect
在服务器端,ServerSocket类持续侦听传入的连接请求。当ServerSocket接收到连接请求时,它调用accept()方法来实例化一个新的Socket对象。类似地,此方法也会阻塞,直到与远程客户机成功建立连接。
- 如果TCP握手没有完成,则连接仍然不成功。结果,程序抛出IOException,指示在建立新连接时发生错误
发生“ Read timed out”的原因
没有服务正在侦听远程主机上的给定端口
远程主机不接受任何连接
远程主机不可用
网速慢
没有到远端主机的转发路径
有时,防火墙出于安全原因会阻塞某些端口。因此,当客户端试图建立到服务器的连接时,可能会出现“连接超时”错误。因此,在将端口绑定到服务之前,我们应该检查防火墙设置,看看它是否阻塞了端口。
解决方法
对于TCP客户端和服务器端,我们可以使用setSoTimeout(int timeout)方法指定socketInputStream.read()方法阻塞的时间量:文章来源:https://www.toymoban.com/news/detail-443661.html
Socket socket = new Socket(host, port);
socket.setSoTimeout(30000);
但是,如果在方法返回之前超时,程序将抛出SocketTimeoutException。文章来源地址https://www.toymoban.com/news/detail-443661.html
到了这里,关于问题解决:java.net.SocketTimeoutException: Read timed out的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!