1 import java.io.DataInputStream;
2 import java.io.DataOutputStream;
3 import java.io.IOException;
4 import java.net.ServerSocket;
5 import java.net.Socket;
6 import java.util.List;
7 import java.util.Timer;
8 import java.util.TimerTask;
9 import java.util.concurrent.CopyOnWriteArrayList;
10
11 /**
12 * @author ct568
13 */
14 public class ChatServer {
15 private final List<ChatThread> chatThreadList = new CopyOnWriteArrayList<>();
16
17 public static void main(String[] args) {
18 new ChatServer().startServer();
19 }
20
21 private void startServer() {
22 try {
23 // 开启服务端Socket
24 ServerSocket serverSocket = new ServerSocket(10000);
25 System.out.println("等待客户端连接");
26 while (true) {
27 // 接受客户端连接请求
28 Socket socket = serverSocket.accept();
29 System.out.println("一个客户端已连接");
30 // 开启线程处理客户端通信
31 ChatThread ct = new ChatThread(socket);
32 chatThreadList.add(ct);
33 ct.start();
34
35 new Timer().schedule(new TimerTask() {
36 @Override
37 public void run() {
38 ct.send("hello 你好啊");
39 }
40 }, 1000);
41 }
42 } catch (IOException e) {
43 e.printStackTrace();
44 }
45 }
46
47 private class ChatThread extends Thread {
48 private final Socket socket;
49 private DataInputStream dataInputStream = null;
50 private DataOutputStream dataOutputStream = null;
51
52 public ChatThread(Socket socket) {
53 super();
54 this.socket = socket;
55 }
56
57 // 发送信息的函数
58 private void send(String msg) {
59 try {
60 dataOutputStream.writeUTF(msg);
61 dataOutputStream.flush();
62 } catch (IOException e) {
63 e.printStackTrace();
64 }
65 }
66
67 @Override
68 public void run() {
69 try {
70 dataInputStream = new DataInputStream(socket.getInputStream());
71 dataOutputStream = new DataOutputStream(socket.getOutputStream());
72
73 // 读取数据
74 while (true) {
75 byte[] bys = new byte[1024];
76 int offset = 0;
77 int length = dataInputStream.read(bys, offset, bys.length);
78 String msg = new String(bys, offset, length);
79 System.out.printf("msg = '%s'\n", msg);
80
81 for (ChatThread chatThread : chatThreadList) {
82 chatThread.send(msg);
83 }
84 }
85 } catch (IOException e) {
86 e.printStackTrace();
87 } finally {
88 try {
89 dataOutputStream.close();
90 dataInputStream.close();
91 socket.close();
92 } catch (IOException e) {
93 e.printStackTrace();
94 }
95 }
96 }
97
98 }
99 }
1 import * as net from 'net'
2
3 const socket = net.createConnection(10000, 'localhost')
4
5 socket.on('close', (had_error: boolean) => {
6 console.log('had_error', had_error)
7 });
8
9 socket.on('connect', () => {
10 console.log('connect')
11 socket.write('2021-01-29 09:37:34')
12 console.log('2021-01-29 09:39:27 发送完成')
13 });
14
15 socket.on('data', (data: Buffer) => {
16 console.log(`data->'${data.toString('utf8')}'`)
17 });
18
19 socket.on('drain', () => {
20 console.log('drain')
21 });
22
23 socket.on('end', () => {
24 console.log('end')
25 });
26
27 socket.on('error', (err: Error) => {
28 console.log('error', err)
29 });
30
31 socket.on('lookup', (err: Error, address: string, family: string | number, host: string) => {
32 console.log('lookup', err, address, family, host)
33 });
34
35 socket.on('timeout', () => {
36 console.log('timeout')
37 });