Я работал над базовым кодом для передачи текста на 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.
Редактировать: Загруженный полный код