Java网络编程TCP多线程实现服务端接受多个客户端的信息

服务线程

java 复制代码
import java.io.DataInputStream;
import java.io.InputStream;
import java.net.Socket;

public class ServerReaderThread extends  Thread{
        private Socket socket;

        public ServerReaderThread(Socket socket){
                this.socket = socket;
        }
        @Override
        public void run(){
                try{
                        //使用数据输入流  读取 用户发过来的信息
                        //获取字节输入流
                        InputStream ipt = socket.getInputStream();
                        //把原始的字节输入流包装成数据输入流
                        DataInputStream dis =new DataInputStream(ipt);
                        while (true){
                             try{

                                     String rs = dis.readUTF();
                                     System.out.println(rs);
                                     System.out.println("------------------------");
                             }catch (Exception e){
                                     System.out.println(socket.getRemoteSocketAddress()+"下线...");
                                     break;
                             }
                        }
                }catch (Exception e){
                        e.printStackTrace();
                }
        }
}

服务端

java 复制代码
import java.net.ServerSocket;
import java.net.Socket;

public class Server2 {
    public static void main(String[] args) throws  Exception{
        System.out.println("------------服务端启动--------------");
        //创建ServerSocket对象  为服务端注册端口
        ServerSocket socketServer =new ServerSocket(7777);
        while (true){
            //调用accept 方法等待客户端的链接请求
            Socket socket = socketServer.accept();
            System.out.println(socket.getRemoteSocketAddress()+"上线....");
            new ServerReaderThread(socket).start();
        }
    }
}

客户端

java 复制代码
import java.io.DataOutput;
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class Client2 {
    public static void main(String[] args) throws  Exception {
        //创建一个socket 对象  并同时请求与服务端程序的链接
        Socket socket = new Socket("127.0.0.1",7777);
        //从socket管道中获取字节流 用来发数据给服务端
        OutputStream os = socket.getOutputStream();

        //把低级的字节输出流  换成数据输出流
        DataOutputStream dos =  new DataOutputStream(os);
        //开始写数据
        Scanner sc =new Scanner(System.in);
        while (true){
            System.out.println("user:");
            String msg =sc.nextLine();
            if("exit".equals(msg)){
                System.out.println("退出会话...");
                dos.close();
                //释放连接资源
                socket.close();
                break;
            }
            dos.writeUTF(msg);
            dos.flush();
        }
    }
}

效果

相关推荐
十六年开源服务商19 小时前
2026年WordPress网站地图完整指南
java·前端·javascript
Edward1111111120 小时前
3月17枚举
java·开发语言
凡。。。29620 小时前
阿里云产品说明
java
蓝天守卫者联盟120 小时前
2026乙酸乙酯回收设备厂家选型与技术实践
java·jvm·python·算法
于先生吖20 小时前
教育数字化转型 JAVA 国际版答题练习系统完整开发教程
java·开发语言
Johnstons20 小时前
2026企业网络流量监控与分析工具对比
运维·网络·数据库·网络流量监控·网络流量分析
lakernote20 小时前
EasyPostman 重大更新:正式支持插件模式,当前已上线 5 个官方插件
java·测试工具·开源·postman
我是唐青枫20 小时前
C#.NET ConcurrentStack<T> 深入解析:无锁栈原理、LIFO 语义与使用边界
网络·c#·.net
赫瑞20 小时前
Java中的 Dijkstra 算法
java·算法