㈠ java中使用Socket連接,關閉是出異常如何處理
你光有try catch,但實際並未對產生的網路異常進行處理,然後繼續循環,那自然是無限異常下去了。只要在catch到異常後進行相應處理即可,比如關閉連接,然後退出。在服務端,客戶端都加上這個處理,比如在客戶端加,如下
publicvoidrun()
{
while(true)
{
Useru=newUser();
u.setName("1");
ObjectOutputStreamoos;
try
{
oos=newObjectOutputStream(s.getOutputStream());
oos.writeObject(u);
}
catch(Exceptione)
{
//TODOAuto-generatedcatchblock
e.printStackTrace();
//注意,這邊會看到顯示的是true,因為對方並沒有調用close來關閉連接,而是直接終止程序
System.out.println(s.isConnected());
if(s!=null)
{
try
{
s.close();
s=null;
}
catch(Exceptionex)
{
ex.printStackTrace();
}
System.out.println("遠程連接異常,關閉連接");
return;
}
}
}
}
註:
你的這種情況即不能用u=ois.readObject())!=null來判斷,也不能用s.isConnected&&!s.isColse()來判斷,因為你是直接終止服務端或者客戶端的運行,而不是先close連接,再終止程序。
㈡ java里socket通信,異常處理問題。
直接用這種方式處理:
while(true){
socket=newSocket(("192.168.183.1",9002);
socket.setSoTimeout(5000);//5000ms=5s
try{
socket.connect();
}catch(IOExceptione){
//這行寫你提示通信失敗提示
continue;
}
}
㈢ Java socket 編程 連接失敗!
如果是不停的發送數據,你可以維持一個socket長連接,當客戶端連接上發送完數據後不要關閉socket,繼續發送握手信息以維持連接。客戶端很多的話就用線程池ThreadPoolExecutor.
具體資料:
㈣ java異常處理:關於Socket編程的
當輸入過程中意外到達文件或流的末尾時,拋出此異常。 此異常主要被數據輸入流用來表明到達流的末尾。注意,其他許多輸入操作返回一個特殊值表示到達流的末尾,而不是拋出異常。
代碼太少,無法再細說了。
㈤ java.net.SocketTimeoutException: Read timed out
具體的解決方法如下:
修改tomcat配置文件server.xml,找到類似於下面配置:
<Connector port="8086" maxHttpHeaderSize="8192"。
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"。
enableLookups="false" redirectPort="8443" acceptCount="100"。
connectionTimeout="20000" disableUploadTimeout="true" /> 。
將上面的參數disableUploadTimeout值改為false即可。