客户端服务器端交互
在单客户端与服务器聊天中引入线程,将发送消息和接收消息功能分别加入到线程中实现.
//服务器端
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket=new ServerSocket(9999);
Socket socket=serverSocket.accept();//监听
new SenfThread(socket).start();
new ReceiveThread(socket).start();
}
}
//客户端
public class Client {
public static void main(String[] args) throws IOException {
Socket socket=new Socket("127.0.0.1",9999);
//创建并启动发送线程
new SenfThread(socket).start();
new ReceiveThread(socket).start();
}
}
//发送消息线程
public class SenfThread extends Thread{
private Socket socket;
private DataOutputStream out;
public SenfThread(Socket socket) throws IOException {
this.socket = socket;
this.out=new DataOutputStream(socket.getOutputStream());
}
@Override
public void run() {
Scanner scanner=new Scanner(System.in);
while(true){
String s=scanner.next();
try {
if(socket.isClosed()||s.equals("886")){
break;
}
out.writeUTF(s);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//接受消息线程
public class ReceiveThread extends Thread{
private Socket socket;
private DataInputStream in;
public ReceiveThread(Socket socket) throws IOException {
this.socket = socket;
this.in = new DataInputStream(socket.getInputStream());
}
@Override
public void run() {
while (true) {
try {
String s = in.readUTF();
System.out.println(s);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}