Java实现QQ聊天

简介

QQ聊天是一种实时通信的应用程序,可以在电脑、手机等设备上进行文字、语音和视频的交流。在本文中,我将教会你如何使用Java语言来实现一个简单的QQ聊天程序。

流程图

st=>start: 开始
op1=>operation: 创建服务器
op2=>operation: 创建客户端
op3=>operation: 服务器监听端口
op4=>operation: 客户端连接服务器
op5=>operation: 服务器接收消息
op6=>operation: 客户端发送消息
op7=>operation: 客户端接收消息
op8=>operation: 服务器发送消息
e=>end: 结束

st->op1->op2->op3->op4->op5->op6->op7->op8->e

实现步骤

步骤 描述
1 创建服务器
2 创建客户端
3 服务器监听端口
4 客户端连接服务器
5 服务器接收消息
6 客户端发送消息
7 客户端接收消息
8 服务器发送消息

代码实现

1. 创建服务器

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(8888); // 创建服务器套接字,监听8888端口
            System.out.println("服务器启动,等待客户端连接...");
            Socket clientSocket = serverSocket.accept(); // 等待客户端连接
            System.out.println("客户端连接成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 创建客户端

import java.io.IOException;
import java.net.Socket;

public class Client {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost", 8888); // 连接服务器
            System.out.println("成功连接服务器!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. 服务器监听端口

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(8888);
            System.out.println("服务器启动,等待客户端连接...");

            Socket clientSocket = serverSocket.accept();
            System.out.println("客户端连接成功!");

            BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            String message = reader.readLine(); // 读取客户端发送的消息
            System.out.println("客户端发送的消息:" + message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4. 客户端连接服务器

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

public class Client {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost", 8888);
            System.out.println("成功连接服务器!");

            PrintWriter writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
            writer.println("Hello Server"); // 发送消息给服务器
            writer.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

5. 服务器接收消息

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(8888);
            System.out.println("服务器启动,等待客户端连接...");

            Socket clientSocket = serverSocket.accept();
            System.out.println("客户端连接成功!");

            BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            String message = reader.readLine();
            System.out.println("客户端发送的消息:" + message);

            PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());
            writer.println("Hello Client"); // 发送消息给客户端
            writer.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

6. 客户端发送消息

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

public class Client {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost", 8888