当前位置:   article > 正文

J031_使用TCP协议支持与多个客户端同时通信

J031_使用TCP协议支持与多个客户端同时通信

一、需求文档

使用TCP协议支持与多个客户端同时通信。

1.1 Client

  1. package com.itheima.tcp2;
  2. import java.io.DataOutputStream;
  3. import java.io.OutputStream;
  4. import java.net.Socket;
  5. import java.util.Scanner;
  6. public class Client {
  7. public static void main(String[] args) throws Exception {
  8. //1、创建socket对象,并同时请求与服务端程序的连接
  9. Socket socket = new Socket("127.0.0.1",8888);
  10. //2、从socket通信管道中得到一个字节输出流,用来发数据给服务端程序
  11. OutputStream os = socket.getOutputStream();
  12. //3、把低级的字节输出流包装成数据输出流
  13. DataOutputStream dos = new DataOutputStream(os);
  14. Scanner sc = new Scanner(System.in);
  15. while (true) {
  16. System.out.println("请说:");
  17. String msg = sc.nextLine();
  18. //退出
  19. if ("exit".equals(msg)) {
  20. System.out.println("欢迎下次光临!退出成功");
  21. dos.close();
  22. socket.close();
  23. break;
  24. }
  25. //4、开始写数据出去
  26. dos.writeUTF(msg);
  27. dos.flush();
  28. }
  29. }
  30. }

1.2 Server

  1. package com.itheima.tcp2;
  2. import java.io.DataInputStream;
  3. import java.io.InputStream;
  4. import java.net.ServerSocket;
  5. import java.net.Socket;
  6. public class Server {
  7. public static void main(String[] args) throws Exception {
  8. //启动服务端
  9. System.out.println("-----服务端启动成功------");
  10. //1、创建serversocket对象,同时为服务端程序注册端口
  11. ServerSocket serverSocket = new ServerSocket(8888);
  12. while (true) {
  13. //2、使用serverSocket对象,调用accept方法,等待客户端的连接请求
  14. Socket socket = serverSocket.accept();
  15. System.out.println("有人上线了" + socket.getRemoteSocketAddress());
  16. //3、把这个客户端对于的socket通信管道,交给一个独立的线程负责处理
  17. new ServerReaderThread(socket).start();
  18. }
  19. }
  20. }

1.3 ServerReaderThread

  1. package com.itheima.tcp2;
  2. import java.io.DataInputStream;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.net.Socket;
  6. public class ServerReaderThread extends Thread{
  7. private Socket socket;
  8. public ServerReaderThread(Socket socket) {
  9. this.socket = socket;
  10. }
  11. @Override
  12. public void run() {
  13. try {
  14. InputStream is = socket.getInputStream();
  15. DataInputStream dis = new DataInputStream(is);
  16. while (true) {
  17. try {
  18. String msg = dis.readUTF();
  19. System.out.println(msg);
  20. } catch (Exception e) {
  21. System.out.println("有人下线了!" + socket.getRemoteSocketAddress());
  22. dis.close();
  23. socket.close();
  24. break;
  25. }
  26. }
  27. } catch (Exception e) {
  28. throw new RuntimeException(e);
  29. }
  30. }
  31. }

二、运行结果

客户端1

客户端2

客户端3

服务端

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/926971
推荐阅读
相关标签
  

闽ICP备14008679号