Java实现带图形界面的聊天程序
作者:CaiBenwei 发布时间:2022-04-25 22:41:55
标签:Java,聊天
本文实例为大家分享了Java实现带图形界面聊天程序的具体代码,供大家参考,具体内容如下
ServerDemo01.java
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.*;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo01 implements ActionListener {
private ServerSocket serverSocket;
private Socket socket;
private DataInputStream dataInputStream;
private DataOutputStream dataOutputStream;
private JFrame jFrame;
private JScrollPane jScrollPane;
private JTextArea jTextArea;
private JPanel jPanel;
private JTextField jTextField;
private JButton jButton;
public ServerDemo01() {
//创建组件
jFrame = new JFrame("服务器");
jTextArea = new JTextArea();
jScrollPane = new JScrollPane(jTextArea);
jPanel = new JPanel();
jTextField = new JTextField(20);
jButton = new JButton("发送");
//添加组件到容器
jFrame.add(jScrollPane, BorderLayout.CENTER);
jFrame.add(jPanel, BorderLayout.SOUTH);
jPanel.add(jTextField);
jPanel.add(jButton);
//设置窗体
jFrame.setBounds(200,200,400,300);
jFrame.setVisible(true);
jFrame.setResizable(false);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//添加监听
jButton.addActionListener(this);
//TCP网络通信
try {
serverSocket = new ServerSocket(9999);
socket = serverSocket.accept();//等待连接
dataInputStream = new DataInputStream(socket.getInputStream());
dataOutputStream = new DataOutputStream(socket.getOutputStream());
while(true) {//接收来自客户端的消息
String strClient = dataInputStream.readUTF();
jTextArea.append("客户端:" + strClient + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void actionPerformed(ActionEvent e) {
//监听发送按钮
if(e.getSource()==jButton){
String str = jTextField.getText();//获取文本框中的内容
if(str.length()==0)//发送内容为空
JOptionPane.showMessageDialog(jTextField,"发送内容不能为空");
else{
//将数据发送到客户端
try {
dataOutputStream.writeUTF(str);
jTextArea.append("服务器:"+str + "\n");
jTextField.setText("");
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
}
}
public static void main(String[] args) {
new ServerDemo01();
}
}
ClientDemo01.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
public class ClientDemo01 implements ActionListener {
private Socket socket;
private DataInputStream dataInputStream;
private DataOutputStream dataOutputStream;
private JFrame jFrame;
private JScrollPane jScrollPane;
private JTextArea jTextArea;
private JPanel jPanel;
private JTextField jTextField;
private JButton jButton;
public ClientDemo01() {
//创建组件
jFrame = new JFrame("客户端");
jTextArea = new JTextArea();
jScrollPane = new JScrollPane(jTextArea);
jPanel = new JPanel();
jTextField = new JTextField(20);
jButton = new JButton("发送");
//添加组件
jFrame.add(jScrollPane, BorderLayout.CENTER);
jFrame.add(jPanel,BorderLayout.SOUTH);
jPanel.add(jTextField);
jPanel.add(jButton);
//设置窗体
jFrame.setBounds(610,200,400,300);
jFrame.setVisible(true);
jFrame.setResizable(false);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//添加监听
jButton.addActionListener(this);
//TCP网络通信
try {
socket = new Socket("127.0.0.1",9999);
dataInputStream = new DataInputStream(socket.getInputStream());
dataOutputStream = new DataOutputStream(socket.getOutputStream());
//接收服务器的消息
while (true) {
String strServer = dataInputStream.readUTF();
jTextArea.append("服务器:"+strServer + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==jButton){
String str = jTextField.getText();
if(str.length()==0)
JOptionPane.showMessageDialog(jTextField,"发送内容不能为空");
else{
try {
dataOutputStream.writeUTF(str);
jTextArea.append("客户端:"+str + "\n");
jTextField.setText("");
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
}
}
public static void main(String[] args) {
new ClientDemo01();
}
}
运行截图:
来源:https://blog.csdn.net/qq_45708165/article/details/118070591


猜你喜欢
- 1.身份证规则计算方法(来源百度)将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2
- PDF文件包(Portfolio)允许用户将多种不同类型的文件如Word、Excel、PDF、PowerPoint和图片等集合到一个PDF文
- 引言对于Nacos大家应该都不太陌生,出身阿里名声在外,能做动态服务发现、配置管理,非常好用的一个工具。然而这样的技术用的人越多面试被问的概
- 在Java世界中,AES、DES加密解密需要使用Cipher对象构建加密解密系统,Hutool中对这一对象做再包装,简化了加密解密过程。介绍
- 再做一个项目的时候,要求标题栏的标题再中间,样式,字体大小都要自定义。左边一个返回按钮,一个关闭按钮,右边定义一个提交按钮,有时候显示有时候
- 本周的谷歌I/O大会带来了很多关于Android的振奋人心的消息。可能我们需要较长的时间来消化Android L引入的新东西。这些天我一直在
- 一、JDK中常见的异常情况1、常见异常总结图2、java中异常分类Throwable类有两个直接子类:(1)Exception:出现的问题是
- 本文实例讲述了Android开发之DatePickerDialog、TimePickerDialog时间日期对话框用法。分享给大家供大家参考
- 1、Java主要特点简单性、跨平台性、分布性、安全性、健壮性、平 * 立与可移植性、多线程、动态性、面向对象的编程语言、支持垃圾自动收集处理等
- 本文实例讲述了Java正则验证IP的方法。分享给大家供大家参考,具体如下:网上用正则验证IP的表达式有很多,一搜一大堆,可以自己写,但很麻烦
- Spring Boot如何实现分布式系统中的服务发现和注册?随着互联网的快速发展,越来越多的企业开始将自己的业务迁移到分布式系统中。在这种情
- 在spring cloud系列章节中,本来已经写了几个章节了,但是自己看起来有些东西写得比较杂,所以重构了一下springcloud的章节内
- 本文实例为大家分享了Android仿京东分类效果展示的具体代码,供大家参考,具体内容如下1.写一个fragmentimport androi
- 一、线程池使用场景•单个任务处理时间短•将需处理的任务数量大二、使用Java线程池好处1、使用new Thread()创建线程的弊端:•每次
- 一个提交到服务器的处理通常可以分为两个阶段,第一个阶段查询服务器状态(查询或者更新数据库),第二个阶段选择一个合适的结果页面其返回给用户(这
- 一、deleteById 和 delete为什么要把这两个方法放在一起呢?我们先看源码再说deleteById(Id id)(通过id进行删
- 第一次写技术博客,写一下以前写的一个双色球抽奖随机算法。原理如下:1首先初始化一个待抽奖的数组nums,数组的长度k2. 随机一个1-k之间
- 一、获取某年某月的天数1.在实现日期类的过程中,日期加减天数的应用场景一定会频繁使用到这个函数接口,因为加减天数会使得月份发生变化,可能增月
- Jmeter 执行Java 请求时,运行结束后报错,Tidying up remote @ Mon Feb 24 19:42:34 CST
- 本文将向大家展示如何拍照截图。先看看效果图:拍照截图有点儿特殊,要知道,现在的Android智能手机的摄像头都是几百万的像素,拍出来的图片都