1 public static void main(String[] args) {
2 // 单个客户端单条发送
3 System.out.println("=============客户端=============");
4 try {
5 // 创建管道连接请求服务器连接
6 // Socket(String host, int port)
7 Socket socket = new Socket("127.0.0.1",6666);
8 // 从Socket管道中得到一个字节输出流向服务器端发送消息
9 OutputStream os = socket.getOutputStream();
10 // 将低级流包装成打印流
11 PrintStream ps = new PrintStream(os);
12 // 发送消息
13 ps.println("天王盖地虎~");
14 // 刷新
15 ps.flush();
16 } catch (Exception e) {
17 e.printStackTrace();
18 }
19 }
1 public static void main(String[] args) {
2 try {
3 System.out.println("=============服务器端=============");
4 // 注册端口
5 ServerSocket serverSocket = new ServerSocket(6666);
6 // 调用accept方法,等待接收客户端消息,简历Socket管道
7 Socket accept = serverSocket.accept();
8 // 从Socket管道得到一个字节流消息
9 InputStream is = accept.getInputStream();
10 // 把字符输入流包装成缓冲流
11 BufferedReader br = new BufferedReader(new InputStreamReader(is));
12 // 按照行读取消息
13 String msg;
14 if ((msg = br.readLine()) != null){
15 System.out.println(accept.getRemoteSocketAddress() + "说:" + msg);
16 }
17 } catch (Exception e) {
18 e.printStackTrace();
19 }
20 }
1 public static void main(String[] args) {
2 System.out.println("=============客户端=============");
3 // 单个客户端多次发送
4 try {
5 // 创建管道连接请求服务器连接
6 // Socket(String host, int port)
7 Socket socket = new Socket("127.0.0.1",6666);
8 // 从Socket管道中得到一个字节输出流向服务器端发送消息
9 OutputStream os = socket.getOutputStream();
10 // 将低级流包装成打印流
11 PrintStream ps = new PrintStream(os);
12
13 Scanner sc = new Scanner(System.in);
14 while (true) {
15 System.out.println("说:");
16 String msg = sc.next();
17 // 发送消息
18 ps.println(msg);
19 // 刷新
20 ps.flush();
21 }
22 } catch (Exception e) {
23 e.printStackTrace();
24 }
25 }
1 public static void main(String[] args) {
2 try {
3 System.out.println("=============服务器端=============");
4 // 注册端口
5 ServerSocket serverSocket = new ServerSocket(6666);
6 // 调用accept方法,等待接收客户端消息,简历Socket管道
7 while (true) {
8 Socket accept = serverSocket.accept();
9 // 从Socket管道得到一个字节流消息
10 InputStream is = accept.getInputStream();
11 // 把字符输入流包装成缓冲流
12 BufferedReader br = new BufferedReader(new InputStreamReader(is));
13 // 按照行读取消息
14 String msg;
15 while ((msg = br.readLine()) != null){
16 System.out.println(accept.getRemoteSocketAddress() + "说:" + msg);
17 }
18 }
19 } catch (Exception e) {
20 e.printStackTrace();
21 }
22 }


1 public static void main(String[] args) {
2 System.out.println("=============客户端=============");
3 // 多个客户端多次发送
4 try {
5 // 创建管道连接请求服务器连接
6 // Socket(String host, int port)
7 Socket socket = new Socket("127.0.0.1",6666);
8 // 从Socket管道中得到一个字节输出流向服务器端发送消息
9 OutputStream os = socket.getOutputStream();
10 // 将低级流包装成打印流
11 PrintStream ps = new PrintStream(os);
12
13 Scanner sc = new Scanner(System.in);
14 while (true) {
15 System.out.println("请说:");
16 String msg = sc.nextLine();
17 // 发送消息
18 ps.println(msg);
19 // 刷新
20 ps.flush();
21 }
22 } catch (Exception e) {
23 e.printStackTrace();
24 }
25 }
1 public static void main(String[] args) {
2
3 try {
4 System.out.println("=============服务器端=============");
5 // 注册端口
6 ServerSocket serverSocket = new ServerSocket(6666);
7 while (true) {
8 // 没接收到一个消息就交给一个管道
9 Socket socket = serverSocket.accept();
10 System.out.println(socket.getRemoteSocketAddress() + "上线了");
11 // 创建独立线程处理 Socket 消息
12 new ServerReaderThread(socket).start();
13 }
14 } catch (Exception e) {
15 e.printStackTrace();
16 }
17 }
1 // 线程
2 public class ServerReaderThread extends Thread{
3 private Socket socket;
4 public ServerReaderThread(Socket socket){
5 this.socket = socket;
6 }
7 @Override
8 public void run() {
9 try {
10 // 从Socket管道得到一个字节流消息
11 InputStream is = socket.getInputStream();
12 // 把字符输入流包装成缓冲流
13 BufferedReader br = new BufferedReader(new InputStreamReader(is));
14 // 按照行读取消息
15 String msg;
16 while ((msg = br.readLine()) != null){
17 System.out.println(socket.getRemoteSocketAddress() + "说:" + msg);
18 }
19 } catch (Exception e) {
20 System.out.println(socket.getRemoteSocketAddress() + "下线了~~");
21 }
22 }
23 }
1 public static void main(String[] args) {
2 System.out.println("=============客户端=============");
3 // 多个客户端多次发送
4 try {
5 // 创建管道连接请求服务器连接
6 // Socket(String host, int port)
7 Socket socket = new Socket("127.0.0.1",6666);
8 // 从Socket管道中得到一个字节输出流向服务器端发送消息
9 OutputStream os = socket.getOutputStream();
10 // 将低级流包装成打印流
11 PrintStream ps = new PrintStream(os);
12
13 Scanner sc = new Scanner(System.in);
14 while (true) {
15 System.out.println("请说:");
16 String msg = sc.nextLine();
17 // 发送消息
18 ps.println(msg);
19 // 刷新
20 ps.flush();
21 }
22 } catch (Exception e) {
23 e.printStackTrace();
24 }
25 }
1 /*
2 线程池的七大参数
3 1.corePoolSize 线程池核心线程大小
4 2.maximumPoolSize 线程池最大线程数量
5 3.keepAliveTime 空闲线程存活时间
6 4.TimeUnit:
7 unit 空闲线程存活时间单位
8 keepAliveTime的计量单位
9 5.workQueue 工作队列
10 6.threadFactory 线程工厂
11 7.handler 拒绝策略
12 */
13 // 创建线程池对象
14 private static ExecutorService pool = new ThreadPoolExecutor(3, 5, 6,
15 TimeUnit.SECONDS, new ArrayBlockingQueue<>(2), Executors.defaultThreadFactory(),
16 new ThreadPoolExecutor.AbortPolicy());
17
18 public static void main(String[] args) {
19 try {
20 System.out.println("=============服务器端=============");
21 // 注册端口
22 ServerSocket serverSocket = new ServerSocket(6666);
23 while (true) {
24 // 没接收到一个消息就交给一个管道
25 Socket socket = serverSocket.accept();
26 System.out.println(socket.getRemoteSocketAddress() + "上线了");
27 // 负责读取消息
28 pool.execute(new ServerSocketRunnable(socket));
29 }
30 } catch (Exception e) {
31 e.printStackTrace();
32 }
33 }
1 public class ServerSocketRunnable implements Runnable {
2 private Socket socket;
3 public ServerSocketRunnable(Socket socket){
4 this.socket = socket;
5 }
6 @Override
7 public void run() {
8 try {
9 // 从Socket管道得到一个字节流消息
10 InputStream is = socket.getInputStream();
11 // 把字符输入流包装成缓冲流
12 BufferedReader br = new BufferedReader(new InputStreamReader(is));
13 // 按照行读取消息
14 String msg;
15 while ((msg = br.readLine()) != null){
16 System.out.println(socket.getRemoteSocketAddress() + "说:" + msg);
17 }
18 } catch (Exception e) {
19 System.out.println(socket.getRemoteSocketAddress() + "下线了~~");
20 }
21 }
22 }
1 public class ClientDemo {
2 // TCP通信群发转发
3 public static void main(String[] args) throws Exception {
4 System.out.println("=============客户端=============");
5 // 创建管道连接请求服务器连接
6 // Socket(String host, int port)
7 Socket socket = new Socket("127.0.0.1",6666);
8 // 创建独立线程专门负责客户端消息(服务器端可能随时发送消息过来
9 new ClientReaderThread(socket).start();
10 // 从Socket管道中得到一个字节输出流向服务器端发送消息
11 OutputStream os = socket.getOutputStream();
12 // 将低级流包装成打印流
13 PrintStream ps = new PrintStream(os);
14
15 Scanner sc = new Scanner(System.in);
16 while (true) {
17 String msg = sc.nextLine();
18 // 发送消息
19 ps.println(msg);
20 // 刷新
21 ps.flush();
22 }
23 }
24 }
25
26 class ClientReaderThread extends Thread{
27 private Socket socket;
28 public ClientReaderThread(Socket socket){
29 this.socket = socket;
30 }
31 @Override
32 public void run() {
33 try {
34 // 从Socket管道得到一个字节流消息
35 InputStream is = socket.getInputStream();
36 // 把字符输入流包装成缓冲流
37 BufferedReader br = new BufferedReader(new InputStreamReader(is));
38 // 按照行读取消息
39 String msg;
40 while ((msg = br.readLine()) != null){
41 System.out.println("收到消息:" + msg);
42 }
43 } catch (Exception e) {
44 System.out.println("下线了~~");
45 }
46 }
47 }
1 public class ServerSocketDemo {
2 // 定义一个集合存储全部在线的Socket
3 public static List<Socket> allOnlineSockets = new ArrayList<>();
4 public static void main(String[] args) throws Exception {
5 System.out.println("=============服务器端=============");
6 // 注册端口
7 ServerSocket serverSocket = new ServerSocket(6666);
8 while (true) {
9 // 没接收到一个消息就交给一个管道
10 Socket socket = serverSocket.accept();
11 System.out.println(socket.getRemoteSocketAddress() + "上线了");
12 allOnlineSockets.add(socket);
13 // 创建独立线程处理 Socket 消息
14 new ServerReaderThread(socket).start();
15 }
16 }
17 }
18
19 class ServerReaderThread extends Thread{
20 private Socket socket;
21 public ServerReaderThread(Socket socket){
22 this.socket = socket;
23 }
24 @Override
25 public void run() {
26 try {
27 // 从Socket管道得到一个字节流消息
28 InputStream is = socket.getInputStream();
29 // 把字符输入流包装成缓冲流
30 BufferedReader br = new BufferedReader(new InputStreamReader(is));
31 // 按照行读取消息
32 String msg;
33 while ((msg = br.readLine()) != null){
34 System.out.println(socket.getRemoteSocketAddress() + "说了:" + msg);
35 // 把这个消息发送给所有管道
36 sendMsgToAll(msg);
37 }
38 } catch (Exception e) {
39 System.out.println(socket.getRemoteSocketAddress() + "下线了~~");
40 ServerSocketDemo.allOnlineSockets.remove(socket);
41 }
42 }
43
44 private void sendMsgToAll(String msg) throws Exception {
45 for (Socket socket : ServerSocketDemo.allOnlineSockets) {
46 PrintStream ps = new PrintStream(socket.getOutputStream());
47 ps.println(msg);
48 ps.flush();
49 }
50 }
51 }