Клиенту необходимо начать и завершить разговор с ключевым словом «конец».Когда клиент вводит end и нажимает Enter, сервер должен напечатать «сеанс завершен», и клиент и сервер должны быть закрыты.
Проблема, с которой я сталкиваюсь, заключается в том, что когда я заканчиваю работу на стороне клиента, сокет клиента закрывается, сервер печатает «сеанс завершен», но сокет сервера не закрывается, пока вы не нажмете Enter на стороне сервера.<- это ошибка.Мне нужно, чтобы оба заканчивались, когда вы печатаете end и нажимаете enter на стороне клиента.</p>
Сервер -
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
try {
ServerSocket sSock = new ServerSocket(1201);
Socket sock = sSock.accept();
DataInputStream din = new DataInputStream(sock.getInputStream());
DataOutputStream dout = new DataOutputStream(sock.getOutputStream());
BufferedReader reader = new BufferedReader(new
InputStreamReader(System.in));
String msgin = "";
String msgout ="";
while(!msgin.equals("end")) {
msgin = din.readUTF();
System.out.println(msgin);
msgout = reader.readLine();
dout.writeUTF("Server: " + msgout);
dout.flush();
}
System.out.println("ended");
} catch (Exception e) {
// TODO: handle exception
}
}
}
Клиент -
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
try {
Socket sock = new Socket("127.0.0.1", 1201);
System.out.println("Server: This is Server");
DataInputStream din = new DataInputStream(sock.getInputStream());
DataOutputStream dout = new DataOutputStream(sock.getOutputStream());
BufferedReader reader = new BufferedReader(new
InputStreamReader(System.in));
String msgin ="";
String msgout ="";
while(!msgin.equals("end")) {
msgout = reader.readLine();
if (msgout.equals("end")) {
sock.close();
}
dout.writeUTF("Client: " + msgout);
msgin = din.readUTF();
System.out.println(msgin);
}
sock.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}