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();
        }
    }
}

效果

相关推荐
贞明电子5 小时前
工业三色报警灯怎么接入项目系统?开关量与RS485控制应用指南
运维·网络·微信公众平台·贞明电子
学长毕设5 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
HideF5 小时前
Linux
linux·服务器·网络
万联WANFLOW5 小时前
海外网络故障怎么排查?Cloudflare 三季度断网报告解读与 mtr 实战
运维·网络·故障分析
sbjdhjd5 小时前
网工进阶笔记:H3CSE 园区网全栈技术与协议汇总
网络·笔记·云计算·ssh·网络工程·vlan·aaa
zzu123zsw6 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
源码集结号7 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统
论文复现现场7 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
taktok_ai7 小时前
用 cc-switch 连接 Taktok
网络
啃瓜子的松鼠8 小时前
泛微OAe9-后端二开异步调用
java