色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

tcp端口阻塞解決方法

夏志豪2年前39瀏覽0評論

tcp端口阻塞解決方法?

大家知道,tcp的讀和寫是阻塞的,即讀的時候不知道什么時候讀完,寫的時候不知道什么時候寫完,因此線程就一直暫停在哪里,一般tcp程序用在上位機下位機之間對吧!下位機一些設備一般會發心跳報文給我們機器,假設為10s發一次吧,當機器超過10s沒接收到數據,那么我們就要考慮把socket斷開,因為不斷開的話設備重新連接可能又會建立新的socket,這樣如果設備反復斷開連接的話,將產生大量的socket,占用大量系統資源,這里我們用socket.setSoTimeout(500)方法解決read方法的阻塞問題,同時設定一個標志位,在異常處理程序當中退出socket連接:

public void run(){

InputStream is = null;

OutputStream os = null;

int flag = 0;

try {

socket.setSoTimeout(500); // 0.5秒就退出read()方法的阻塞

is = socket.getInputStream();

os = socket.getOutputStream();

} catch (Exception e2) {

e2.printStackTrace();

}

while (true) {

try {

// 讀取數據

int readlen = is.read(buff);

if (readlen > 0) {

flag = 0;

}

byte data[] = Arrays.copyOfRange(buff, 0, readlen);

resolveData(data);

} catch (IOException e) {

try {

flag++;

if (flag == 200) {

is.close();

os.close();

socket.close();

}

} catch (Exception e1) {

e1.printStackTrace();

}

}

}

}

java 如何阻塞線程,tcp端口阻塞解決方法