導航:首頁 > 編程語言 > javasocket超時編程

javasocket超時編程

發布時間:2023-01-25 14:13:19

1. java socket 客戶端設置未接收到數據的超時問題

建議如果是長時間沒有收到數據的話,或者是不想長時間等待的話,都可以通過設置超時時間來進行斷開連接,之後繼續處理邏輯(設置socket的setSoTimeout方法實現即可,時間單位是毫秒):

packagesocket;
importjava.io.ByteArrayOutputStream;
importjava.io.InputStream;
importjava.net.InetSocketAddress;
importjava.net.ServerSocket;
importjava.net.Socket;
importjava.net.SocketAddress;
importjava.net.SocketException;
importjava.net.SocketTimeoutException;
importjava.text.SimpleDateFormat;
importjava.util.Arrays;
importjava.util.Date;
publicclassSocketService{
publicstaticvoidmain(String[]args){
try{
SocketAddressaddress=newInetSocketAddress("192.168.9.155",3000);
//啟動監聽埠8001
ServerSocketss=newServerSocket();
ss.bind(address);
//接收請求
Sockets=ss.accept();
newThread(newT(s)).start();
}catch(Exceptione){
e.printStackTrace();
}
}
}
classTimplementsRunnable{
publicvoidrun(){
try{
System.out.println(socket.toString());
socket.setKeepAlive(true);
socket.setSoTimeout(5*1000);
String_pattern="yyyy-MM-ddHH:mm:ss";
SimpleDateFormatformat=newSimpleDateFormat(_pattern);
while(true){
System.out.println("開始:"+format.format(newDate()));
try{
InputStreamips=socket.getInputStream();
ByteArrayOutputStreambops=newByteArrayOutputStream();
intdata=-1;
while((data=ips.read())!=-1){
System.out.println(data);
bops.write(data);
}
System.out.println(Arrays.toString(bops.toByteArray()));
}catch(SocketTimeoutExceptione){
e.printStackTrace();
}catch(SocketExceptione){
e.printStackTrace();
}catch(Exceptione){
e.printStackTrace();
}
Thread.sleep(1000);
System.out.println(socket.isBound());//是否邦定
System.out.println(socket.isClosed());//是否關閉
System.out.println(socket.isConnected());//是否連接
System.out.println(socket.isInputShutdown());//是否關閉輸入流
System.out.println(socket.isOutputShutdown());//是否關閉輸出流
System.out.println("結束:"+format.format(newDate()));
}
}catch(Exceptione){
e.printStackTrace();
}
}
privateSocketsocket=null;
publicT(Socketsocket){
this.socket=socket;
}
publicSocketgetSocket(){
returnsocket;
}
publicvoidsetSocket(Socketsocket){
this.socket=socket;
}
}

2. 可以為Java Socket寫消息設置超時嗎

可以。
URLConnection裡面有一個setConnectionTimeout(int timeout);

* @param timeout an {@code int} that specifies the connect
* timeout value in milliseconds

3. java,socket連接如何設置超時

socket.setSoTimeout(int timeout);
恩。應該能實現你的要求

首先socket不是一個阻塞方法,它不會自動去連serverSocket,而是你connect一次它就去連一次,socket本身不存在什麼連接server端超時,所以客戶端的連接超時是由你的程序去控制的,比如用線程。

其次,惡意連接這個問題,其實我已經給你解決了,在server端拿到socket後,不就能用socket.setSoTimeout()來設置連接時間了么?

4. java socket 超時 異常 求解決 java.net.SocketTimeoutException: Read timed out

這個應該有配置超時的地方吧,你把超時時間配置的長一點,另外就是在你調用的地方記錄日誌觀察你這個遠程調用耗時到底是多少。

5. 在JAVA中,如何設定socket連接的時間超時時間等參數,

Socket類里有一個setTimeout()函數,可以設定socket上讀請求的超時時間;還有在connect()函數中,可以在第二個參數中指定socket連接超時時間。具體可以看看API文檔。

6. java如何設定socket等待連接時的超時時間

如果IP或埠填錯了 就用socket 的 setSoTimeout(timeout);這個方法 這個是連接超時時間,單位是毫秒,就是在timeout/1000秒內如果沒有完成TCP連接,就會觸發超時異常。

7. java socket怎麼設置超時時間

socket.setSoTimeout(inttimeout);//timeout:超時時長,單位為秒

8. 如何用java在socket上設置時間延遲

try {
//創建伺服器套接字,於9999埠監聽
ServerSocket server = new ServerSocket(9999);
//設置超時時間,以毫秒為單位,如果accept方法阻塞的時間超過設定的時間,
//將拋出SocketTimeoutException異常
server.setSoTimeout(10000);
//進行阻塞監聽
Socket client = server.accept();
} catch (SocketTimeoutException e) {
System.out.println("連接超時");
}catch (Exception e) {
e.printStackTrace();
}

9. Java:這兩種設置Socket超時時間的方法有什麼不同嗎

connect timeout 是連接超時, 比如30秒內連接不上。
Socket timeout 是連接上以後,server沒有回應的超時。

閱讀全文

與javasocket超時編程相關的資料

熱點內容
考駕照怎麼找伺服器 瀏覽:882
阿里雲伺服器如何更換地區 瀏覽:970
手機app調音器怎麼調古箏 瀏覽:501
銳起無盤系統在伺服器上需要設置什麼嗎 瀏覽:17
紅旗計程車app怎麼應聘 瀏覽:978
如何編寫linux程序 瀏覽:870
吉利車解壓 瀏覽:248
java輸入流字元串 瀏覽:341
安卓軟體沒網怎麼回事 瀏覽:785
dvd壓縮碟怎麼導出電腦 瀏覽:274
冒險島什麼伺服器好玩 瀏覽:541
如何在伺服器上做性能測試 瀏覽:793
命令序列錯 瀏覽:259
javaif的條件表達式 瀏覽:576
手機app上傳的照片怎麼找 瀏覽:531
雲伺服器面臨哪些威脅 瀏覽:748
c語言各種編譯特點 瀏覽:177
路由器多種加密方法 瀏覽:604
程序員阻止電腦自動彈出定位 瀏覽:168
如何做伺服器服務商 瀏覽:763