銅川網站建設報價網絡推廣的主要工作內容
簡單了解Sockets
Sockets:兩個計算機應用程序之間邏輯鏈接的一個端點,是應用程序用來通過網絡發(fā)送和接收數據的邏輯接口
- 是
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類持續(xù)偵聽傳入的連接請求。當ServerSocket接收到連接請求時,它調用accept()方法來實例化一個新的Socket對象。類似地,此方法也會阻塞,直到與遠程客戶機成功建立連接。
- 如果TCP握手沒有完成,則連接仍然不成功。結果,程序拋出IOException,指示在建立新連接時發(fā)生錯誤
發(fā)生“ Read timed out”的原因
沒有服務正在偵聽遠程主機上的給定端口
遠程主機不接受任何連接
遠程主機不可用
網速慢
沒有到遠端主機的轉發(fā)路徑
有時,防火墻出于安全原因會阻塞某些端口。因此,當客戶端試圖建立到服務器的連接時,可能會出現“連接超時”錯誤。因此,在將端口綁定到服務之前,我們應該檢查防火墻設置,看看它是否阻塞了端口。
解決方法
對于TCP客戶端和服務器端,我們可以使用setSoTimeout(int timeout)方法指定socketInputStream.read()方法阻塞的時間量:
Socket socket = new Socket(host, port);
socket.setSoTimeout(30000);
但是,如果在方法返回之前超時,程序將拋出SocketTimeoutException。