【发布时间】:2018-10-09 01:50:01
【问题描述】:
客户需要使用关键字“结束”来开始和结束对话。当客户端类型结束并点击进入时,服务器需要打印“会话已结束”并且客户端和服务器都需要关闭。
我遇到的问题是当我在客户端结束时,客户端套接字关闭,服务器打印“会话已结束”但服务器套接字直到您在服务器端按 enter 才会关闭。
服务器 -
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
}
}
}
【问题讨论】:
标签: java command-prompt