服务器代码:
package main.demo;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TcpChatServer {
public static void main(String[] args) throws IOException {
ExecutorService es = Executors.newCachedThreadPool();
ServerSocket lisenler = new ServerSocket(9988);
System.out.println("聊天服务器已经开启");
while(true){
Socket socket = lisenler.accept();
es.submit(new handel(socket));
}
}
static class handel implements Runnable{
private Socket socket;
public handel(Socket socket) {
this.socket = socket;
}
public handel() {
}
@Override
public void run() {
if (socket != null){
InputStream is = null;
BufferedReader br = null;
try {
is = socket.getInputStream();
br = new BufferedReader(new InputStreamReader(is,"utf-8"));
String data;
while((data = br.readLine())!= null) {
System.out.println(socket.getInetAddress().getHostAddress()+"说:"+data);
}
System.out.println(socket.getInetAddress().getHostAddress() +"退出了");
} catch (IOException e) {
e.printStackTrace();
System.out.println(socket.getInetAddress().getHostAddress() +"异常退出了");
}finally {
try {
br.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
客户端代码:
package main.demo;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;
public class TcpChatCLient {
public static void main(String[] args)throws Exception {
Socket socket = new Socket("192.168.109.1",9988);
OutputStream os = socket.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os,"utf-8"));
Scanner input = new Scanner(System.in);
while(true){
String next = input.next();
bw.write(next);
bw.newLine();
bw.flush();
if (next.equals("886")){
break;
}
}
bw.close();
socket.close();
}
}
聊天效果:
服务器端:
客户端: