使用Socket模拟聊天室

文章目录

  • 使用Socket模拟聊天室
    • 客户端
      • 客户端读线程
      • 客户端写线程
      • 客户主函数
    • 服务端
      • 服务端线程
      • 服务端主函数

客户端

客户端读线程

public class EchoClientReadThread implements Runnable{private Socket socket;private BufferedReader in;public EchoClientReadThread(Socket socket,BufferedReader in){this.in = in;this.socket = socket;}@Overridepublic void run() {try {String str = null;while ((str = in.readLine()) != null){System.out.println(str);}} catch (IOException e) {e.printStackTrace();}}
}

客户端写线程

public class EchoClientWriteThread implements Runnable{private PrintWriter out;private Socket socket;Scanner scanner;public EchoClientWriteThread(Socket socket,PrintWriter out,Scanner scanner){this.scanner = scanner;this.out = out;this.socket = socket;}@Overridepublic void run() {String data =null;while ((data=scanner.nextLine())!=null){out.println(data);}}
}

客户主函数

public class EchoClient {public static void main(String[] args) {String host = "127.0.0.1";int port = 12345;try {Socket socket = new Socket(host,port);PrintWriter out = new PrintWriter(socket.getOutputStream(),true);Scanner scanner = new Scanner(System.in);BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));Thread t1 = new Thread(new EchoClientReadThread(socket,in));Thread t2 = new Thread(new EchoClientWriteThread(socket,out,scanner));t1.start();t2.start();} catch (IOException e) {e.printStackTrace();}}
}

服务端

服务端线程

public class EchoServerThread implements Runnable{private ArrayList<Socket> socketarr ;private Socket socket;public EchoServerThread(ArrayList Socketarr,Socket socket){this.socketarr = Socketarr;this.socket = socket;}@Overridepublic void run() {try {InetSocketAddress address =  (InetSocketAddress) socket.getRemoteSocketAddress();BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));String data = null;while ((data= in.readLine())!=null){System.out.println("来自:"+address.getHostName()+":"+address.getPort()+"的信息:"+data);for (Socket s:socketarr){PrintWriter out = new PrintWriter(s.getOutputStream(),true);out.println("来自:"+address.getHostName()+":"+address.getPort()+"的信息:"+data);}}} catch (IOException e) {e.printStackTrace();}}
}

服务端主函数

public class EchoServer {public static void main(String[] args) {int port = 12345;try {ArrayList<Socket> arrayList = new ArrayList<>();ServerSocket sst = new ServerSocket(port);while (true) {Socket ssc = sst.accept();InetSocketAddress address = (InetSocketAddress) ssc.getRemoteSocketAddress();System.out.println(address.getHostName()+":"+address.getPort()+"已连接");arrayList.add(ssc);new Thread(new EchoServerThread(arrayList, ssc)).start();}} catch (IOException e) {e.printStackTrace();}}
}

使用Socket模拟聊天室相关推荐

  1. 用java实现模拟聊天室

    本案例模拟聊天室,有着群发和私聊的功能,一切都在console中进行,没有界面,采用oop思想,封装操作 代码如下: 服务器端:服务端需要连接多个客户端,因此需要循环监听,每次连接一个客户端创建一个C ...

  2. 基于socket的聊天室实现原理

    基于socket的聊天室,目前还比较少见,国内比较知名的有网易和碧海银沙聊天室.这种聊天室的特点很明显,不象CGI聊天室那样不管有没有人发言,都会定时刷新.而是当有人发言时,屏幕上才会出现新聊天内容, ...

  3. Socket.IO聊天室~简单实用

    小编心语:大家过完圣诞准备迎元旦吧~小编在这里预祝大家元旦快乐!!这一次要分享的东西小编也不是很懂啊,总之小编把它拿出来是觉地比较稀奇,而且程序也没有那么难,是一个比较简单的程序,大家可以多多试试~ ...

  4. 模拟聊天室显示语句保持最新显示

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Android 基于Socket的聊天室

    原文地址为: Android 基于Socket的聊天室 Socket是TCP/IP协议上的一种通信,在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路.一旦建立了虚拟的网络链路, ...

  6. 【java毕业设计】基于java+原生Sevlet+socket的聊天室系统设计与实现(毕业论文+程序源码)——聊天室系统

    基于java+原生Sevlet+socket的聊天室系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+原生Sevlet+socket的聊天室系统设计与实现,文章末尾附有本毕业设 ...

  7. 【python】基于Socket的聊天室Python开发

    基于Socket的聊天室Python开发 一.Socket简述 二.创建服务端Server 2.1 创建服务端初始化 2.2 监听客户端连接 2.3 处理客户端消息 三.创建客户端Client 3.1 ...

  8. android socket 简易聊天室 java服务器_利用Socket制作一个简易的Android聊天室

    首先制作一个客户端,界面如下: 使用方法:启动后,首先在登录编辑框输入一个昵称,然后点击登录,上面灰色区域是聊天窗,其中会显示你的登录提示,显示其他人发的消息.在的登录成功后,可以在下面的发送编辑框内 ...

  9. Python Socket 编程——聊天室示例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...

最新文章

  1. HBase 1.2.6 完全分布式集群安装部署详细过程
  2. 风靡硅谷营销界的 MarTech 魔术
  3. mysql性能优化:my.cnf配置文件
  4. Rabbits UVALive - 8211
  5. SAP License:ERP具有的九种优势
  6. 【Linux】静态库与动态库的生成及调用
  7. Android从assets和res中读取文件
  8. hashcode()和equals()的区别
  9. 小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_34、SpringBoot整合Mybatis实操和打印SQL语句...
  10. 慢慢的,就没有了,就像从未存在过
  11. 【IPD从零到一】创业指导:IPD 是什么?
  12. 如何关闭mysql secure_file_priv
  13. 【总结】1396- 60+个 VSCode 插件,打造好用的编辑器
  14. 从零开始用人工智能预测股票(三、初步实现)
  15. python中用于生成随机数的函数的简单总结
  16. yox.js 的使用
  17. office(如:Word、Excel、PPT 等)文件轻松实现在线预览
  18. 金蝶kis记账王凭证过账要不要要审核
  19. 任何快速查询IP归属地
  20. 解决linux上的Give root password for maintenance问题

热门文章

  1. map and flatmap 区别
  2. vc++怎么可以直接刷掉MBR?搞笑的吧
  3. 小蚂蚁学习C语言(35)——两行三列二维数组变三行两列二维数组
  4. jQuery-1.9.1源码分析系列(六) 延时对象应用——jQuery.ready
  5. 在SQL SERVER中实现Split功能的函数,并在存储过程中使用
  6. springboot接口入参下划线转驼峰以及返回参数驼峰转下划线实现
  7. SSI——服务器端嵌入
  8. Git根据文件名字查询修改文件内容
  9. Git的SourceTree添加授权添加用户名与密码
  10. java preparedstatement 关闭_java - 如果基础连接已关闭,为什么isClosed()方法对PreparedStatements不返回true? - 堆栈内存溢出...