Чтение из сокета без блокировки

  1. private static String readFromSocket(Socket sock) throws Exception {
  2.     InputStream in = sock.getInputStream();
  3.     StringBuilder result = new StringBuilder(" ");
  4.     int timeout = 0;
  5.     int a;
  6.     while (true) {
  7.         a = in.available();
  8.         if (a > 0) {
  9.             int r = in.read();
  10.             if (r == -1) {
  11.                 break;
  12.             }
  13.             result.append((char) r);
  14.             timeout = 0;
  15.         } else {
  16.             Thread.sleep(10);
  17.             a = in.available();
  18.             if (a == 0) {
  19.                 timeout++;
  20.             }
  21.             if (timeout > 40) {
  22.                 break;  // timeout
  23.             }
  24.         }
  25.     }
  26.     return result.toString();
  27. }
Если считывать из сокета как из обычного потока, то он зависнет

Реклама

Мы в соцсетях

tw tg yt gt