Сокет закрыт Исключение и исключение EOF - PullRequest
0 голосов
/ 30 января 2019

Я работал над базовым кодом для передачи текста на Java, и мне не удалось понять ошибку в моем коде.

Как на стороне сервера, так и на стороне клиента есть один и тот же код для отправки и получения.

Сервер:

ServerSocket ss = new ServerSocket(44444);
System.out.println("Waiting...");
Socket s = ss.accept();
System.out.println("Connected!\n\n");

DataInputStream din=new DataInputStream(s.getInputStream());
DataOutputStream dout = new DataOutputStream(s.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

Thread send = new Thread(new Runnable()
{
   public void run()
   {
      try
      {
         String tx = "";
         while(!tx.equalsIgnoreCase("Over"))
         {
            tx = br.readLine();
            if(tx.equals(""))
               continue;
            dout.writeUTF(tx);
            dout.flush();
         }
      }
      catch(Exception e)
      {
         e.printStackTrace();
      }

   }
};

Thread receive = new Thread(new Runnable()
{
   public void run()
   {
      try
      {
         String rx = "";               
         while(!rx.equalsIgnoreCase("Over"))
         {
            rx = din.readUTF();
            System.out.println("Server: " + rx);
         }
      }
      catch(Exception e)
      {
         e.printStackTrace();
      }
   }
});

send.start();
receive.start();

if(!send.isAlive()||!receive.isAlive())
{
   din.close();
   dout.close();
   ss.close();
}

Клиент:

Socket s = new Socket("localhost",44444);
System.out.println("Connected!\n\n");

Scanner in = new Scanner(System.in);
DataInputStream din=new DataInputStream(s.getInputStream());
DataOutputStream dout = new DataOutputStream(s.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

Thread send = new Thread(new Runnable()
{
   public void run()
   {
      try
      {
         String tx = "";
         while(!tx.equalsIgnoreCase("Over"))
         {
            tx = br.readLine();
            if(tx.equals(""))
               continue;
            dout.writeUTF(tx);
            dout.flush();
         }
      }
      catch(Exception e)//Itha catch zala exception
      {
         e.printStackTrace();
      }

      System.out.println("a");

    }
});

Thread receive = new Thread(new Runnable()
{
   public void run()
   {
      try
      {
         String rx = "";               
         while(!rx.equalsIgnoreCase("Over"))
         {
            rx = din.readUTF();
            System.out.println("Server: " + rx);
         }
      }
      catch(Exception e)
      {
         e.printStackTrace();
      }
   }
});

send.start();
receive.start();     

if(!send.isAlive()||!receive.isAlive())
{
   din.close();
   dout.close();
   s.close();
}

Исключение составляет "din.readUTF ();"Предполагается, что сообщение будет передано, но оно просто вызывает EOFexception и SocketException: Socket Closed.

Редактировать: Загруженный полный код

...