1. 程式人生 > >Java Socket網路程式設計常見異常(轉)

Java Socket網路程式設計常見異常(轉)

1.java.net.SocketTimeoutException

這個異常比較常見,socket超時。一般有2個地方會丟擲這個,一個是connect的時候,這個超時引數由connect(SocketAddress endpoint, int timeout)中的後者來決定,還有就是setSoTimeout(int timeout),這個是設定讀取的超時時間。他們設定成0均表示無限大。
-----------------------------------------------------------------------------------------------------
2.java.net.BindException:Address already in use:JVM_Bind
該異常發生在伺服器端進行new ServerSocket(port)或者socket.bind(SocketAddress bindpoint)操作時。

原因:與port一樣的一個埠已經被啟用,並進行監聽。 此時用netstat -an 命令,可以看到一個Listening狀態的埠。 只需要找到一個沒有被佔用的埠就能解決這個問題。
------------------------------------------------------------------------------------------------------ 3.java.net.ConnectException:Connection refused:connect 該異常發生在客戶端進行new Socket(ip, port)或者socket.connect(address, timeout)操作時。 原因:指定ip地址的機器不能找到(也就是說從當前機器不存在到指定ip路由), 或者是該ip存在,但找不到指定的埠進行監聽。應該首先檢查客戶端的ip和port 是否寫錯了,假如能ping通(伺服器端把ping禁掉則需要另外的方法),則看在伺服器端的 監聽指定埠的程式是否啟動。
--------------------------------------------------------------------------------------------------------
4.java.net.SocketException:Socket is closed 該異常在客戶端和伺服器端均可能發生。異常的原因是己方主動關閉了連線後 (呼叫了Socket的close方法)再對網路連線進行讀寫操作。 ------------------------------------------------------------------------------ 5.java.net.SocketException: Connection reset或者Connect reset by peer:Socket write error
 該異常在客戶端和伺服器端均有可能發生,引起該異常的原因有兩個,第一個就是假如一端的Socket被關閉(或主動關閉或者因為異常退出而引起的關閉), 另一端仍傳送資料,傳送的第一個資料包引發該異常(Connect reset by peer)。另一個是一端退出,但退出時並未關閉該連線,另一端假如在從連線中讀資料則丟擲該異常(Connection reset)。簡單的說就是在連線斷開後的讀和寫操作引起的。 對於伺服器,一般的原因可以認為:  a) 伺服器的併發連線數超過了其承載量,伺服器會將其中一些連線主動Down掉. b) 在資料傳輸的過程中,瀏覽器或者接收客戶端關閉了,而服務端還在向客戶端傳送資料。 ---------------------------------------------------------------------------- 6.java.net.SocketException: Broken pipe
 該異常在客戶端和伺服器均有可能發生。在丟擲SocketExcepton:Connect reset by peer:Socket write error後,假如再繼續寫資料則丟擲該異常。前兩個異常的解決方法是首先確保程式退出前關閉所有的網路連線,其次是要檢測對方的關閉連線操作,發現對方 關閉連線後自己也要關閉該連線。 對於4和5這兩種情況的異常,需要特別注意連線的維護。在短連線情況下還好,如果是長連線情況,對於連線狀態的維護不當,則非常容易出現異常。基本上對長連線需要做的就是: a) 檢測對方的主動斷連(對方呼叫了Socket的close方法)。因為對方主動斷連,另一方如果在進行讀操作,則此時的返回值是-1。所以一旦檢測到對方斷連,則主動關閉己方的連線(呼叫Socket的close方法)。 b) 檢測對方的宕機、異常退出及網路不通,一般做法都是心跳檢測。雙方週期性的傳送資料給對方,同時也從對方接收“心跳資料”,如果連續幾個週期都沒有收到對 方心跳,則可以判斷對方或者宕機或者異常退出或者網路不通,此時也需要主動關閉己方連線;如果是客戶端可在延遲一定時間後重新發起連線。雖然Socket 有一個keep alive選項來維護連線,如果用該選項,一般需要兩個小時才能發現對方的宕機、異常退出及網路不通。 ---------------------------------------------------------------------------------------------- 7.java.net.SocketException: Too many open files  原因: 作業系統的中開啟檔案的最大控制代碼數受限所致,常常發生在很多個併發使用者訪問伺服器的時候。 因為為了執行每個使用者的應用伺服器都要載入很多檔案(new一個socket就需要一個檔案控制代碼),這就會導致開啟檔案的控制代碼的缺乏。  解決方式:  a) 儘量把類打成jar包,因為一個jar包只消耗一個檔案控制代碼,如果不打包,一個類就消耗一個檔案控制代碼。  b) java的GC不能關閉網路連線開啟的檔案控制代碼,如果沒有執行close()則檔案控制代碼將一直存在,而不能被關閉。 也可以考慮設定socket的最大開啟 數來控制這個問題。對作業系統做相關的設定,增加最大檔案控制代碼數量。ulimit -a可以檢視系統目前資源限制,ulimit -n 10240則可以修改,這個修改只對當前視窗有效。

相關推薦

Java Socket網路程式設計常見異常()

1.java.net.SocketTimeoutException 這個異常比較常見,socket超時。一般有2個地方會丟擲這個,一個是connect的時候,這個超時引數由connect(SocketAddress endpoint, int timeout)中的後者來決定,還有就是setSoTimeout

Java Socket網路程式設計的經典例子()

   事實上網路程式設計簡單的理解就是兩臺計算機相互通訊資料而已,對於程式設計師而言,去掌握一種程式設計介面並使用一種程式設計模型相對就會顯得簡單的多了,Java SDK提供一些相對簡單的Api來完成這些工作。Socket就是其中之一,對於Java而言,這些Api存在與jav

Java Socket網路程式設計

Java Socket網路程式設計 計算機網路中,客戶機與伺服器之間進行通訊時,客戶機必須知道伺服器的IP地址和埠號。IP地址是標識Internet網路中的某臺計算機,而埠號則標識著在伺服器上執行的某個程式(程序),如果在伺服器上執行的程式,沒有埠號,則客戶端的程式就不能找到它,也不能和它

java socket網路程式設計例項程式碼(含服務端和客戶端)

本程式碼為java socket網路程式設計例項程式碼,包括客戶端和服務端,實現客戶端傳送訊息,服務端接收並反饋訊息。 server.java為服務端程式碼。 client.java為客戶端程式碼。 服務端程式碼server.java: package socket;

Java-socket網路程式設計

Java 網路程式設計 網路程式設計是指編寫執行在多個裝置(計算機)的程式,這些裝置都通過網路連線起來。 java.net 包中 J2SE 的 API 包含有類和介面,它們提供低層次的通訊細節。你可以直接使用這些類和介面,來專注於解決問題,而不用關注通訊細節。 java.net

Java Socket網路程式設計:實現簡單的區域網共享檔案(PeertoPeer)

介紹 程式碼很簡單,只需要兩個java檔案:Server.java和Client.java。 程式碼不是我寫的,出自:這裡(感興趣的可以自行下載,這裡就不貼出來了) 執行結果 簡要說一下怎麼執行,這裡演示在同一個電腦上執行(也可以在多個電腦上執行,但客戶端的ip要改為伺服器端所在

JAVA SOCKET網路程式設計,服務端接收多個客戶端連線的實現

這是基於前面一篇文章的一個簡單擴充套件,當然這不是最好的實現 服務端如果要想接收多個客戶端連線,必須死迴圈去接收新的客戶端的連線請求,一個完整的客戶端服務端socket連線通過一個執行緒來維護 package com.tree.demo.socket; import

Java Socket網絡編程常見異常()

超時 open 當前 keep 心跳檢測 容易 str 所有 com 轉:https://www.cnblogs.com/qq78292959/p/5085559.html 1.java.net.SocketTimeoutException   這個異常比較常見,

javasocket 網路程式設計

socket的通俗解釋: 套接字=主機+埠號。兩個東西配在一起,叫做“配套”。 另外“套”也有對應的意思,它可以把網路上的兩個應用對應起來,所以用“套”。 它是用來與另一個應用連線的,所以用“接”。 又因為它是一小段資料,很小一小段,所以叫“字”。 “套接字",就是一小段用來將網路個兩個應用

java網路程式設計(InetAddress,InetSocketAddress,URL,TCP(Socket與SeverSocket),TCP與UDP的區別)

  InerAddress: /**IP地址:在網路上唯一標示一臺計算機 * 埠號:標示計算機上不同的應用程式 * java.net.InetAddress類:此類表示網際網路協議 (IP) 地址。 * 常用方法: * getByName(String host) 在給定主機名的情況下

網路程式設計常見問題總結

網路程式設計常見問題總結 這裡對在網路程式中遇到的一些問題進行了總結, 這裡主要針對的是我們常用的TCP socket相關的總結, 可能會存在錯誤, 有任何問題歡迎大家提出. 對於網路程式設計的更多詳細說明建議參考下面的書籍 《UNIX網路程式設計》 《TCP/IP 詳解》 《Unix環境高階程式設

【翻譯】java-TCP-socket網路程式設計2

我搬家到部落格園了。。。。 URL url = new URL("http://jenkov.com");//新建一個URL URLConnection urlConnection = url.o

Java 基於UDP的Socket網路程式設計的入門及示例

前言:天吶!這兩天上班就像走鋼絲啊,老大家裡出事請假一週,手機關機,底層無人照看,機器又忙著定標,技術盲老闆事事問我這個底層小白。做人好難吶。。。還是祝願老大家裡沒有大礙吧,也保佑自己明天能安然度過。。保佑保佑。 原文出處:http://blog.c

Java系列-Socket網路程式設計,TCP/IP和Http等網路協議理解

一、網路各個協議:TCP/IP、SOCKET、HTTP等 網路七層由下往上分別為物理層、資料鏈路層、網路層、傳輸層、會話層、表示層和應用層。 其中物理層、資料鏈路層和網路層通常被稱作媒體層,是網路工程師所研究的物件; 傳輸層、會話層、表示層和應用層則被稱作主機層,是使用者

[Socket網路程式設計]一個封鎖操作被對 WSACancelBlockingCall 的呼叫中斷。

原文地址:http://www.cnblogs.com/xiwang/archive/2012/10/25/2740114.html記錄在此,方便查閱。 C#中在使用UDPClient迴圈監聽埠,在斷開UPDClient的時候,使用try...catch捕獲了異常,System.NET.Socket

Python_day6:socket網路程式設計

一、socket   socket即套接字,用於描述IP地址和埠,是一個通訊鏈的控制代碼,應用程式通常通過"套接字"向網路發出請求或者應答網路請求。   最簡單的socket,一次 1 import socket 2 server = socket.socket() #獲得例項

python------Socket網路程式設計(二)粘包問題

一.socket網路程式設計  粘包:服務端兩次傳送指令在一起,它會把兩次傳送內容合在一起傳送,稱為粘包,從而出現錯誤。 解決方法:(比較low的方法) 有些需要實時更新的,用sleep有延遲,不能這樣解決問題。 解決方法之高階方法: 客戶端: 二.傳送檔案 ftp s

java基礎----網路程式設計 tcp

package cn.itcast.tcp; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.n

Java基礎---網路程式設計 ip udp

package cn.itcast.ip; import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; /*  網路程式設計

Socket網路程式設計進階與實戰資源分享

Socket網路程式設計進階與實戰資源分享 Socket網路程式設計進階與實戰資源分享 獲取資源新增qq+2100776785 獲取資源新增qq+2100776785 第1章 課程介紹 本章將從軟體測試的起源與發展、測試行業的現狀及職業生涯規劃等整體做介紹。 第2章 軟體測試工程師必