当前位置: 首页 > news >正文

Java基于TCP网络编程的群聊功能

服务端

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

 服务端的线程(用来处理客户端发来的数据)

import java.io.*;
import java.net.Socket;public class ServerReaderThread extends  Thread{private Socket socket;public ServerReaderThread(Socket socket){this.socket = socket;}@Overridepublic void run(){try{//使用数据输入流  读取 用户发过来的信息//获取字节输入流InputStream ipt = socket.getInputStream();//把原始的字节输入流包装成数据输入流DataInputStream dis =new DataInputStream(ipt);while (true){try{String rs = dis.readUTF();System.out.println(rs);//把这个消息分发给客户端sendMsgToAll(rs);System.out.println("------------------------");}catch (Exception e){System.out.println(socket.getRemoteSocketAddress()+"下线...");dis.close();break;}}}catch (Exception e){e.printStackTrace();}}private void sendMsgToAll(String msg) throws Exception {for (Socket socket1 : Server2.onlineList) {OutputStream os =socket1.getOutputStream();DataOutputStream dos = new DataOutputStream(os);dos.writeUTF(msg);dos.flush();}}
}

客户端

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);//创建一个独立的线程   来读取 服务端发给客户端的消息new ClientReaderThread(socket).start();//从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();}}
}

客户端的线程(用于服务端推送的数据)

import java.io.DataInputStream;
import java.io.InputStream;
import java.net.Socket;public class ClientReaderThread extends Thread{private Socket socket;public ClientReaderThread(Socket socket){this.socket = socket;}@Overridepublic 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()+"下线...");dis.close();break;}}}catch (Exception e){e.printStackTrace();}}
}

效果

此篇基于:

Java网络编程---TCP-CSDN博客

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

实现..... 

http://www.lryc.cn/news/267480.html

相关文章:

  • CentOS+ISCSI
  • RHCE9学习指南 第11章 网络配置
  • Qt如何在控制台项目中使用opencv打开视频
  • Node.js 默认包管理器 npm 详解
  • vue利用深拷贝解决修改不能取消的问题
  • MATLAB - 使用 YOLO 和基于 PCA 的目标检测,对 UR5e 的半结构化智能垃圾箱拣选进行 Gazebo 仿真
  • 个性化定制的知识付费小程序,为用户提供个性化的知识服务,知识付费saas租户平台
  • 基于flask和echarts的新冠疫情实时监控系统源码+数据库,后端基于python的flask框架,前端主要是echarts
  • 总结js中遍历对象属性的方法
  • 编写fastapi接口服务
  • RasaGPT对话系统的工作原理
  • C++设计模式 #7 工厂方法(Factory Method)
  • 信息网络协议基础-接入网技术
  • springboot 自动装配原理
  • 前端---表格标签
  • 【软件工程】可执行文件和数据分离
  • Linux dirs命令
  • 有什么好用的C/C++源代码混淆工具?
  • iOS设备信息详解
  • 如何使用支付宝沙箱环境支付并公网调用sdk创建支付单服务
  • [EFI]Dell Latitude-7400电脑 Hackintosh 黑苹果efi引导文件
  • 用芯片SIC8833可开发电子秤方案
  • 【Qt-QFile-QDir】
  • 设计模式之-单列设计模式,5种单例设计模式使用场景以及它们的优缺点
  • Android 13 - Media框架(25)- OMXNodeInstance(二)
  • 生物系统学中的进化树构建和分析R工具包V.PhyloMaker2的介绍和详细使用
  • XStream 反序列化漏洞 CVE-2021-39144 已亲自复现
  • 深入剖析LinkedList:揭秘底层原理
  • 计算机网络复习-OSI TCP/IP 物理层
  • 虚拟机服务器中了lockbit2.0/3.0勒索病毒怎么处理,数据恢复应对步骤