Java实现简易聊天室

article/2025/10/23 5:17:11

Java实现简易聊天室

在学习《Java从入门到精通》这本书,网络通信,基于TCP实现的简易聊天室,我这里对书中的代码略做了修改,做个记录。

 

这里先放一下运行效果图,代码放在最后。

 

运行效果:

先启动服务器端:

 

 

启动客户端:

 

 发送数据:

 

 

 主要的功能就是上面那些,在代码中我还添加一些功能,比如说给JTextField添加了焦点监听器,以及输入框为空的检查和提示,但总的来说还是比较简单,如果要实现健壮的聊天室程序还需要再做些修改。

 

下面放下代码,比较简单,就服务器端和客户端两个代码。

 

服务器端代码:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import static java.lang.System.out;public class MyTcp {private BufferedReader reader;private ServerSocket server;private Socket socket;void getServer(){try {server=new ServerSocket(8998);        //实例化Socket对象out.println("服务器套接字已创建成功");while(true) {out.println("等待客户机的连接");socket=server.accept();           //accept()方法会返回一个和客户端Socket对象相连的Socket对象reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));getClientMessage();}}catch(Exception e) {e.printStackTrace();}}//读取客户端发送过来的信息private void getClientMessage() {try {while(true) {//获得客户端信息out.println("客户机:"+reader.readLine());}}catch(Exception e) {e.printStackTrace();}try {if(reader!=null) {reader.close();}if(socket!=null) {socket.close();}}catch(Exception e) {e.printStackTrace();}}public static void main(String[] args) {MyTcp tcp=new  MyTcp();tcp.getServer();}}

 

 

 

客户端代码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.io.PrintWriter;
import java.net.Socket;import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;public class MyClient extends JFrame{private PrintWriter writer;Socket socket;private JTextArea ta=new JTextArea();private JTextField tf=new JTextField();Container cc;public MyClient(String title) {super(title);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);cc=this.getContentPane();final JScrollPane scrollPane=new JScrollPane();scrollPane.setBorder(new BevelBorder(BevelBorder.RAISED));getContentPane().add(scrollPane,BorderLayout.CENTER);scrollPane.setViewportView(ta);cc.add(tf,"South");tf.addFocusListener(new JTextFieldListener(tf,"请在此输入内容"));tf.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {if(tf.getText().isEmpty()) {JOptionPane.showMessageDialog(MyClient.this, "请输入内容!");}else {writer.println(tf.getText());ta.append(tf.getText()+"\n");ta.setSelectionEnd(ta.getText().length());tf.setText("");}}});}//焦点监听器class JTextFieldListener implements FocusListener{private String hintText;          //提示文字private JTextField textField;public JTextFieldListener(JTextField textField,String hintText) {this.textField=textField;this.hintText=hintText;textField.setText(hintText);   //默认直接显示
            textField.setForeground(Color.GRAY);}@Overridepublic void focusGained(FocusEvent e) {//获取焦点时,清空提示内容String temp=textField.getText();if(temp.equals(hintText)){textField.setText("");textField.setForeground(Color.BLACK);}}@Overridepublic void focusLost(FocusEvent e) {//失去焦点时,没有输入内容,显示提示内容String temp=textField.getText();if(temp.equals("")) {textField.setForeground(Color.GRAY);textField.setText(hintText);}}}private void connect() {ta.append("尝试连接\n");try {socket=new Socket("127.0.0.1",8998);writer=new PrintWriter(socket.getOutputStream(),true);ta.append("完成连接\n");}catch(Exception e) {e.printStackTrace();}}public static void main(String[] args) {//EventQueue事件队列,封装了异步事件指派机制EventQueue.invokeLater(new Runnable(){public void run() {MyClient client=new MyClient("向服务器发送数据");client.setSize(400,400);client.setVisible(true);client.connect();}});}}

 

 

启动的时候要注意先启动服务器端再启动客户端,不然会报错。

 

 

 

 

 

菜鸟还需要不断学习。

 

转载于:https://www.cnblogs.com/hzauxx/p/11145756.html


http://chatgpt.dhexx.cn/article/xidhtBa5.shtml

相关文章

javaWeb实现聊天室(私聊+群聊)

写在前面 近几天,迎来了第一个小项目,不做不知道,一做吓一跳。好多知识都掌握的不够扎实,看似会了,但其实似懂非懂,不能真正掌握原理,导致使用起来错误百出。而且深深体会到,知识只有…

java实现聊天室(GUI界面+私聊+群聊)

登录界面的用户名和端口号不能重复! 登录界面的用户名和端口号不能重复! 登录界面的用户名和端口号不能重复! java的socket编写的聊天室,GUI的界面,可以私聊和群聊, 聊天信息保存为txt 有需要的可以自行下…

用Java代码实现一个简单的聊天室功能

一.客户端的创建 1.我们可以用Socket来创建客户端 /***类名 Client*描述 TODO 客户端 1*版本 1.0*创建人 XuKang*创建时间 2020/9/24 16:18**/ public class Client {public static void main(String[] args) throws UnknownHostException, IOException {System.out.println(…

Java在线聊天室(客户端+服务器)

Java在线聊天室(客户端服务器)基于webSocket实现模拟在线聊天系统 运行环境: JDK1.8version 开发环境:Eclipse 一、结构 以下是系统主要结构: 1.用户(均实现部分可能会有bug) (…

apiDay09整理笔记(笔记优化)

目录 1.聊天室(续) (1)实现服务端发送消息给客户端 (2)服务端转发消息给所有客户端 (3)客户端解决收发消息的冲突问题 (4)服务端完成处理客户端断开连接…

JAVA简单聊天室的实现

目录 界面效果图 一、聊天室功能介绍? 二、功能代码 1.服务端 2.客户端 界面效果图 提示:以下是本篇文章正文内容,下面案例可供参考 一、聊天室功能介绍? 1. 、对于聊天室就是处理多个客户端发送的请求与信息,从…

Java网络聊天室---个人博客

Java网络聊天室 ———个人博客 一、项目简介 功能描述: 使用图形用户界面和socket通信,能实现一个聊天室中多人聊天,可以两人私聊,可以发送文件。 实现类似QQ用户注册、登录、聊天等功能。 参考git地址或博客地址&#xff1a…

Java实现ChatRoom

基于连接通信Socket、多线程的Java聊天室 1、开发环境: IDEA2018.1JDK1.8 2、实现功能: 实现了模拟登录注册、群聊、私聊、显示当前在线人数列表; 在发送信息时,会向对方发送者及显示发送时间; 显示在线人数列表…

Java聊天室

项目介绍: Java聊天室是期末设计, 阿里巴巴druidmysql多线程GUImvn项目java Socket 服务端模块:踢出聊天室:管理员可以踢出发言不当的用户。只有当开启服务端的时候,客户端才能起到作用。 客户端模块: 注册…

用Java实现简易聊天室

说明:如果一个 类,需要有界面的显示,那么该类就需要继承自JFrame,此时,该类就可以被称为一个“窗体类"。 服务端代码: package cn.qy.chat;import javax.swing.*; import java.awt.*; import java.aw…

微信小程序购物车功能实现(干货满满)

微信小程序定制好看的购物车页面,实现购物车功能,希望对您有所帮助! 1. 应用场景 2. 思路分析 3. 代码分析 4. 具体实现代码 效果截图: 1.应用场景 适用于商城、秒杀、商品购买等类型的小程序,负责将顾客浏览的商…

微信小程序微商城(八):缓存实现商品购物车功能

IT实战联盟博客:http://blog.100boot.cn 上一篇:微信小程序微商城(七):动态API实现商品分类 看效果 购物车.gif 开发计划 1、商品详情页将商品信息放入缓存 2、购物车页面读取缓存获取商品信息 3、购物车商品计算…

微信小程序开发一个小型商城(六、购物车页面)

上一篇文章:微信小程序开发一个小型商城(五、商品详情) 当我们在商品详情界面中点击添加购物后,会跳转到购物车界面,购物车界面是一个tabbar,在跳转的时候需要加上ope-type。看下购物车的静态页面把&#x…

微信小程序实现一个购物车页面的简易列表效果

本文只是简单的模仿天猫APP的购物车列表的样式效果&#xff0c;并实现了部分事件功能&#xff0c;功能并不完善&#xff0c;请降低期待观看。 天猫APP的购物车效果&#xff1a; 小程序模仿的实现效果&#xff1a; wxml部分的代码&#xff1a; <view wx:if"{{!isCartEmp…

【Python之pymysql库学习】一、分析fetchone()、fetchmany()、fetchall()(保姆级图文+实现代码)

目录 实现效果实现思路实现代码总结 欢迎关注 『Python之pymysql库学习』 系列&#xff0c;持续更新中 欢迎关注 『Python之pymysql库学习』 系列&#xff0c;持续更新中 实现效果 实现思路 其实有半数代码是创建数据库和创建数据表并插入数据这些环境配置部分我都写好了&…

fetchone、fetchall

fetchone(): 该方法获取下一个查询结果集。结果集是一个对象,读取一行结果&#xff0c;读取完指向下一行&#xff0c;到空为止 fetchall():接收全部的返回结果行&#xff0c;到空为止 fetchone() &#xff1a; 返回单个的元组&#xff0c;也就是一条记录(row)&#xff0c;如果没…

python fetchall方法_Python连接MySQL并使用fetchall()方法过滤特殊字符

python3.3从mysql里取出的数据莫名其妙有括号和逗号每天跟自己喜欢的人一起&#xff0c;通电话&#xff0c;旅行&#xff0c;重复一个承诺和梦想&#xff0c;听他第二十八次提起童年往事&#xff0c;每年的同一天和他庆祝生日&#xff0c;每年的情人节圣诞节除夕&#xff0c;也…

pdo fetchAll

作用 fetchAll()方法是获取结果集中的所有行.其返回值是一个包含结果集中所有数据的二维数组。 PDOStatement::fetchAll ([ int $fetch_style [, mixed $fetch_argument[, array$ctor_args array() ]]] ) fetch_style:控制结果的返回方式 PDO::FETCH_ASSOC 关联数组形式 PD…

记录一个常用函数fetchall()的使用过程

fetchall() 作用是返回多个元组&#xff0c;即对应数据库里的多条数据概念&#xff1b; 常见用法是 cursor.execute(‘select * from table’) value cursor.fetchall() 此时&#xff0c;print(value)则会输出以下二维元组&#xff0c;如下图 拓展&#xff1a; 同类函数fet…

Python从Oracle数据库中获取数据——fetchall(),fetchone(),fetchmany()函数功能分析

Python从Oracle数据库中获取数据——fetchall(),fetchone(),fetchmany()函数功能分析 一、fetchall()&#xff0c;fetchone()&#xff0c;fetchmany()简单介绍 1、fetchall()函数,它的返回值是多个元组,即返回多个行记录,如果没有结果,返回的是() 2、fetchone()函数,它的返回…