Java基于Socket实现简单QQ聊天详细教程

本文档详述了如何使用Java的Socket实现一个简单的QQ聊天系统。服务端负责响应客户端连接,接收并广播消息,而客户端通过指定服务器IP和端口连接,发送和接收消息。服务端和客户端都涉及多线程编程,客户端界面使用JFrame设计。文章还介绍了环境配置、具体实现步骤,包括服务器和客户端的成员变量、构造函数、消息发送和接收等,并提供了参考资料链接和GitHub项目地址。
摘要由CSDN通过智能技术生成

Java基于Socket实现简单QQ聊天详细教程

一.引言

  1. 技术框架:
    1.1 Java编程
    1.2 Socket实现通信
    1.3 多线程编程
    1.4 JFrame 设计界面
  2. 实现思路
    如图,基本架构就是设计一个服务端(端口确定)以及多个客户端(可随机可指定)。客户端之间并不直接通信,而是通过同一个服务端进行消息传输。

    服务端:响应客户端连接,接受客户端消息,消息群发
    客户端:通过服务器ip以及port连接对应服务器,发送消息,接受服务端消息,将消息通过界面展示
    二.环境
    操作系统:WindowsXP
    工具:IDEA,JDK13
    三.具体过程
    1.QQServer(服务端)
    1.1 成员变量

```java
    /*标志服务端是否开启*/
    private boolean isStart;
 	/**
     * 服务端使用ServerSocket,port作为监听的端口
     * 客户端使用Socket
     */
    private ServerSocket serverSocket;
    /**
     * 客户端集群
     */
    private List<Client> clients;

1.2 构造函数

    public QQServer(String host,int port){
   
        try {
   
            serverSocket=new ServerSocket();
            SocketAddress socketAddress=new InetSocketAddress(host,port);
            serverSocket.bind(socketAddress,port);
            isStart=true;
            clients=new ArrayList<>();
            System.out.println("服务器启动成功!"+serverSocket.getLocalSocketAddress());
        }catch (Exception e){
   
            System.out.println("服务器启动异常: "+e.getMessage());
            System.exit(0);
        }
    }

主要是进行变量初始化以及绑定服务器ip以及端口
1.3 实现多线程
由于服务端要一直处理客户端连接,消息的接受与发送,于是我们需要将其设计为多线程。实现多线程的方式主要有四种:继承Thread类,实现Runnable接口,实现Callable接口,匿名内部类。这里,选择第一种。

 public class QQServer extends Thread

覆写 start方法,这里是处理客户端的连接,Client是服务端内部的客户端存储类,目的是为了将远程客户端抽象为内部Socket对象存储,存储后便启动该对象线程来接受消息,显然,client也应当是多线程的。详细之后会介绍。

    @Override
    public synchronized void start() {
   
        try {
   
            System.out.println("等待连接中...");
            while (isStart){
   
                /*循环等待*/
                Socket socket=serverSocket.accept();
                System.out.println("连接成功! Address:  "+socket.getRemoteSocketAddress());
                Client client=new Client(socket);
                clients.add(client);
                System.out.println("当前在线人数: "+(clients.isEmpty()
  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值