最近研究了下java socket通信基础,利用代码实现了一个简单的多人聊天室功能,现把代码共享下,希望能帮到有兴趣了解的人。

目录结构:

ChatClient:

package com.panda.chat;import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;@SuppressWarnings("serial")
public class ChatClient extends Frame {private TextArea ta = new TextArea();private TextField tf = new TextField();private DataOutputStream dos = null;private DataInputStream dis = null;private Socket socket = null;private boolean bConnected = false;private Thread thread=null;public static void main(String[] args) {new ChatClient().frameClient();}public void frameClient(){setSize(400, 400);setLocation(400,300);add(ta,BorderLayout.NORTH);add(tf,BorderLayout.SOUTH);pack();tf.addActionListener(new TfListener());//关闭窗口事件监听this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {disconnected();System.exit(0);}});this.connect();setVisible(true);}//链接服务器地址private void connect(){try {socket = new Socket("127.0.0.1", 8888);thread=new Thread(new ChatThread());thread.start();dos = new DataOutputStream(socket.getOutputStream());dis = new DataInputStream(socket.getInputStream());} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//断开连接private void disconnected(){bConnected = false;try {dos.close();dis.close();socket.close();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}//键盘回车事件private class TfListener implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {String strMsg = tf.getText();tf.setText("");try {dos.writeUTF(strMsg);dos.flush();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}}//开启线程接受服务器信息private class ChatThread implements Runnable{@Overridepublic void run() {try {bConnected = true;while(bConnected){String msg = dis.readUTF();String taText = ta.getText();ta.setText(taText+msg+"\n");}} catch (SocketException e) {System.out.println("退出");;} catch (IOException e) {e.printStackTrace();}}}
}

ChatServer:

package com.panda.chat;import java.io.*;
import java.net.*;
import java.util.*;public class ChatServer {private boolean started = false;private List<ChatThread> chatThreads = new ArrayList<ChatThread>();public static void main(String[] args) {new ChatServer().startServer();}private void startServer(){try {//开启服务端SocketServerSocket seso = new ServerSocket(8888);started = true;while(started){//接受客户端连接请求Socket sos = seso.accept();System.out.println("一个客户端已连接");//开启线程处理客户端通信ChatThread ct = new ChatThread(sos);chatThreads.add(ct);new Thread(ct).start();}} catch (IOException e) {e.printStackTrace();} }private class ChatThread implements Runnable{private Socket socket;private DataInputStream din=null;private DataOutputStream don=null;private boolean bConnected = false;public ChatThread(Socket socket) {super();this.socket = socket;}//发送信息的函数private void send(String strMsgIn){try{don.writeUTF(strMsgIn);don.flush();}catch(IOException e){e.printStackTrace();}}@Overridepublic void run() {try{din = new DataInputStream(socket.getInputStream());don = new DataOutputStream(socket.getOutputStream());//读取数据bConnected = true;while(bConnected){String strMsgIn = din.readUTF();System.out.println(strMsgIn);//接收到数据后发送给每个客户端for(int i =0;i<chatThreads.size();i++){chatThreads.get(i).send(strMsgIn);}}}catch (IOException e) {try {//如果客户端出错或关闭,直接关闭连接,并移除List中的当前线程socket.close();chatThreads.remove(this);} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}} finally{try {din.close();don.close();socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
}

运行ChatSever后,再同时打开多次ChatClient,就可以实现多人聊天了,你也试试。

java通信二:利用Socket实现聊天室功能相关推荐

  1. java socket 聊天室_java利用Socket实现聊天室功能实例

    导读热词 最近研究了下Java socket通信基础,利用代码实现了一个简单的多人聊天室功能,现把代码共享下,希望能帮到有兴趣了解的人. 目录结构: ChatClient: package com.p ...

  2. android socket 简易聊天室 java服务器,Android Socket通信实现简单聊天室

    socket通信是基于底层TCP/IP协议实现的.这种服务端不需要任何的配置文件和tomcat就可以完成服务端的发布,使用纯java代码实现通信.socket是对TCP/IP的封装调用,本身并不是一种 ...

  3. java socket编程聊天室_Java Socket通信之聊天室功能

    Java Socket通信之聊天室功能 发布时间:2020-10-17 14:36:00 来源:脚本之家 阅读:73 作者:LY_624 本文实例为大家分享了Java Socket聊天室功能的具体代码 ...

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

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

  5. java socket多人聊天室_如何运用Java socket实现多人聊天室功能

    如何运用Java socket实现多人聊天室功能 导语:如何运用Java socket实现多人聊天室功能呢?下面是小编给大家提供的代码实现,大家可以参考阅读,更多详情请关注应届毕业生考试网. 目录结构 ...

  6. socket通信实例(简单的聊天室)

    这次程序运用socket通信实现一个简单的聊天室. 一开始是想在控制台实现,但遇到问题是输出和输入都在一个界面上,最后还是编一个swing程序来实现. 服务器对每一个客户端分配一个线程,run函数实现 ...

  7. java socket多人聊天_如何运用Java socket实现多人聊天室功能

    导语:如何运用Java socket实现多人聊天室功能呢?下面是小编给大家提供的代码实现,大家可以参考阅读,更多详情请关注应届毕业生考试网. 目录结构: ChatClient: package com ...

  8. java通信项目_Java项目中的多线程通信如何利用Socket实现

    Java项目中的多线程通信如何利用Socket实现 发布时间:2020-11-24 16:44:40 来源:亿速云 阅读:96 作者:Leah 这期内容当中小编将会给大家带来有关Java项目中的多线程 ...

  9. 浅谈JAVA中如何利用socket进行网络编程(二)

    转自:http://developer.51cto.com/art/201106/268386.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...

最新文章

  1. 白盒测试之基本路径覆盖测试
  2. Microsoft.NET框架程序设计--20 CLR寄宿、应用程序域、反射
  3. 【原创】原来你竟然是这样的Chrome?!Firefox笑而不语
  4. 《编码:隐匿在计算机软硬件背后的语言(美)》读书笔记二
  5. c++批量重命名_文件批量重命名?这个方法百试百灵
  6. 基于Fork/Join框架实现对大型浮点数数组排序(归并算法和插入排序算法)
  7. 如何成为一名优秀的程序员?
  8. (转)基于MVC4+EasyUI的Web开发框架经验总结(11)--使用Bundles处理简化页面代码...
  9. android sqlite orm,ioc,Afinal 0.2 发布 Android的快速开发框架(ORM,IOC)
  10. 优云软件又双叒通过CMMI ML3评估 , 研发和质量管理水平创新高
  11. 成都程序员俱乐部通知
  12. Android音视频录制类MediaRecorder用法举例
  13. 携程工作感言(一)(6.30)
  14. dubbo comsumer指定服务
  15. mac电脑的vue问题
  16. 送书 | 令附生信专用简明 Python 文字和视频教程
  17. 推荐花椒直播服务端的 4 个开源项目
  18. 计算机屏幕偏振光原理,隐形却很重要 PC屏幕的那层膜
  19. 细节:如何轻松影响他人
  20. 玩转ECS第6讲 | 弹性计算 Region 化部署和跨可用区容灾介绍

热门文章

  1. Stimulsoft BI Designer创建报告和仪表板
  2. Win10+Ubuntu18.04 双系统安装遇到的问题记录
  3. 关于加强销售费用管理的探讨
  4. 抖音表情包小程序,抖音广告流量主玩法
  5. 启英泰伦三代离线语音AI芯片及AIoT芯片介绍
  6. 草图变真人脸?AI:可以,多草都行
  7. 手机短信验证码一次性 需要第三方平台
  8. MLX90640开发笔记(六)红外图像伪彩色编码
  9. Hi3531D加载TVP7002驱动模块——新手全过程记录
  10. 猿创征文 |【算法入门必刷】数据结构-栈(三)