java通信二:利用Socket实现聊天室功能
最近研究了下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实现聊天室功能相关推荐
- java socket 聊天室_java利用Socket实现聊天室功能实例
导读热词 最近研究了下Java socket通信基础,利用代码实现了一个简单的多人聊天室功能,现把代码共享下,希望能帮到有兴趣了解的人. 目录结构: ChatClient: package com.p ...
- android socket 简易聊天室 java服务器,Android Socket通信实现简单聊天室
socket通信是基于底层TCP/IP协议实现的.这种服务端不需要任何的配置文件和tomcat就可以完成服务端的发布,使用纯java代码实现通信.socket是对TCP/IP的封装调用,本身并不是一种 ...
- java socket编程聊天室_Java Socket通信之聊天室功能
Java Socket通信之聊天室功能 发布时间:2020-10-17 14:36:00 来源:脚本之家 阅读:73 作者:LY_624 本文实例为大家分享了Java Socket聊天室功能的具体代码 ...
- 【java毕业设计】基于java+原生Sevlet+socket的聊天室系统设计与实现(毕业论文+程序源码)——聊天室系统
基于java+原生Sevlet+socket的聊天室系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+原生Sevlet+socket的聊天室系统设计与实现,文章末尾附有本毕业设 ...
- java socket多人聊天室_如何运用Java socket实现多人聊天室功能
如何运用Java socket实现多人聊天室功能 导语:如何运用Java socket实现多人聊天室功能呢?下面是小编给大家提供的代码实现,大家可以参考阅读,更多详情请关注应届毕业生考试网. 目录结构 ...
- socket通信实例(简单的聊天室)
这次程序运用socket通信实现一个简单的聊天室. 一开始是想在控制台实现,但遇到问题是输出和输入都在一个界面上,最后还是编一个swing程序来实现. 服务器对每一个客户端分配一个线程,run函数实现 ...
- java socket多人聊天_如何运用Java socket实现多人聊天室功能
导语:如何运用Java socket实现多人聊天室功能呢?下面是小编给大家提供的代码实现,大家可以参考阅读,更多详情请关注应届毕业生考试网. 目录结构: ChatClient: package com ...
- java通信项目_Java项目中的多线程通信如何利用Socket实现
Java项目中的多线程通信如何利用Socket实现 发布时间:2020-11-24 16:44:40 来源:亿速云 阅读:96 作者:Leah 这期内容当中小编将会给大家带来有关Java项目中的多线程 ...
- 浅谈JAVA中如何利用socket进行网络编程(二)
转自:http://developer.51cto.com/art/201106/268386.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...
最新文章
- 白盒测试之基本路径覆盖测试
- Microsoft.NET框架程序设计--20 CLR寄宿、应用程序域、反射
- 【原创】原来你竟然是这样的Chrome?!Firefox笑而不语
- 《编码:隐匿在计算机软硬件背后的语言(美)》读书笔记二
- c++批量重命名_文件批量重命名?这个方法百试百灵
- 基于Fork/Join框架实现对大型浮点数数组排序(归并算法和插入排序算法)
- 如何成为一名优秀的程序员?
- (转)基于MVC4+EasyUI的Web开发框架经验总结(11)--使用Bundles处理简化页面代码...
- android sqlite orm,ioc,Afinal 0.2 发布 Android的快速开发框架(ORM,IOC)
- 优云软件又双叒通过CMMI ML3评估 , 研发和质量管理水平创新高
- 成都程序员俱乐部通知
- Android音视频录制类MediaRecorder用法举例
- 携程工作感言(一)(6.30)
- dubbo comsumer指定服务
- mac电脑的vue问题
- 送书 | 令附生信专用简明 Python 文字和视频教程
- 推荐花椒直播服务端的 4 个开源项目
- 计算机屏幕偏振光原理,隐形却很重要 PC屏幕的那层膜
- 细节:如何轻松影响他人
- 玩转ECS第6讲 | 弹性计算 Region 化部署和跨可用区容灾介绍