Java TCP 聊天功能GUI
这是一个使用awt,基于TCP协议写的一个gui程序,分为两个部分,客户端和服务端。
该程序目前可以运行在同一计算机上,两个客户端之间进行文字交流。
在运行客户端程序之前需要先运行服务端程序,因为两个客户端之间是无法直接交流的,客户端之间的信息传递都是先将信息传递给服务端,再由服务端将客户端发送过来的信息发送给另一个客户端这样进行的。
运行效果:
这个程序中用到了多线程、网络、io、gui相关的知识,虽然都比较基础,但我还是在写这个程序的过程中学到了平时学习不会学到的一些东西的。
程序的实现并不复杂,因为这个程序中只有最基本的文字交流功能,如果根据当前的知识把这个程序更加完善,还可以向其中添加多客户端互相交流、互传文件、数据库账户登录、数据库保存聊天记录和其他信息、群聊等功能,以实现一个和QQ的基本功能差不多的程序。只不过那样就会非常的麻烦,会很消耗时间。
如果想要得到一个客户端界面,只需要new一个我的代码中的MainWindow对象即可,所以可以在同一个项目中就创建出两个客户端。
编译环境:
windows jdk 9 idea2020
如果您想查看该项目的完整代码,可以私信我发给您。
示例代码如下:
客户端 MainWindow 窗口和功能主要类
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MainWindow extends Frame
{
//网络相关属性
private final Socket socket = new Socket(); //客户端套接字
private String ipString = null; //用于保存本机ip
private final static int PORT = 10006; //端口常量
private PrintWriter clientOut = null; //用于客户端向服务端发送数据
private BufferedReader clientIn = null; //用于接收服务端向客户端发送的数据
//gui相关属性
private final Button sendButton = new Button("Send"); //发送按钮
private final TextArea receiveTestArea = new TextArea("", 18, 84, TextArea.SCROLLBARS_VERTICAL_ONLY); //接收文本区
private final TextArea sendTestArea = new TextArea("", 18, 84, TextArea.SCROLLBARS_VERTICAL_ONLY); //发送文本区
private static final String REPLACE = "#&"; //自定义的用于将发送的内容中的换行替换掉
private boolean threadFlag = true; //接收线程的结束标记
//窗口控件初始化
private void moduleInit()
{
sendButton.setBounds(660, 520, 90, 45); //设置按钮位置、宽高
sendButton.setFont(new Font(null, 0, 16)); //设置发送按钮文本属性
final int SPACING = 20; //控件之间的间距
receiveTestArea.setEditable(false); //设置接收文本区不可编辑
receiveTestArea.setBounds(SPACING, SPACING << 1, 760, 260); //设置接收文本区位置、宽高
receiveTestArea.setBackground(new Color(244,244 ,244)); //设置接收文本区背景色
receiveTestArea.setFont(new Font(null, 0, 16)); //设置接收文本区文本属性
//设置发送文本区位置、宽高
sendTestArea.setBounds(SPACING, receiveTestArea.getY() + receiveTestArea.getHeight() + SPACING, 760, 260);
sendTestArea.setBackground(new Color(250,250 ,250)); //设置发送文本区背景色
sendTestArea.setFont(new Font(null, 0, 20)); //设置发送文本区文本属性
add(sendButton);
add(receive