Heim  >  Artikel  >  Java  >  So implementieren Sie ein einfaches Chat-Programm auf Basis von TCP in Java

So implementieren Sie ein einfaches Chat-Programm auf Basis von TCP in Java

王林
王林nach vorne
2023-05-04 10:34:061590Durchsuche

1. So implementieren Sie die TCP-Kommunikation: Um die TCP-Kommunikation zu implementieren, müssen Sie ein serverseitiges Programm und ein clientseitiges Programm erstellen. Um die Sicherheit der Datenübertragung zu gewährleisten, müssen Sie zunächst die Serverseite implementieren Programm und schreiben Sie dann das Client-Programm.

Führen Sie das Serverprogramm auf dem lokalen Computer und das Clientprogramm auf dem Remotecomputer aus.

Die IP-Adresse des lokalen Computers: 192.168.129.222

So implementieren Sie ein einfaches Chat-Programm auf Basis von TCP in JavaDie IP-Adresse des Remotecomputers: 192.168.214.213

So implementieren Sie ein einfaches Chat-Programm auf Basis von TCP in Java 2. Schreiben Sie das C/S-Architektur-Chat-Programm

1. Schreiben Sie das serverseitige Programm – Server.java.

Erstellen Sie die Server-Klasse im net.hw.network-Paket -seitiges Programm - Client.java

in Erstellen Sie die Client-Klasse im Paket net.hw.network

So implementieren Sie ein einfaches Chat-Programm auf Basis von TCP in Java

package net.hw.network;

import javax.swing.*;
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;

/**
 * 功能:服务器端
 * 作者:华卫
 * 日期:2022年03月18日
 */
public class Server extends JFrame {
    static final int PORT = 8136;
    static final String HOST_IP = "192.168.129.222";

    private JPanel panel1, panel2;
    private JTextArea txtContent, txtInput, txtInputIP;
    private JScrollPane panContent, panInput;
    private JButton btnClose, btnSend;

    private ServerSocket serverSocket;
    private Socket socket;
    private DataInputStream netIn;
    private DataOutputStream netOut;

    public static void main(String[] args) {
        new Server();
    }

    public Server() {
        super("服务器");

        //创建组件
        panel1 = new JPanel();
        panel2 = new JPanel();
        txtContent = new JTextArea(15, 60);
        txtInput = new JTextArea(3, 60);
        panContent = new JScrollPane(txtContent, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        panInput = new JScrollPane(txtInput, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        btnClose = new JButton("关闭");
        btnSend = new JButton("发送");

        //添加组件
        getContentPane().add(panContent, "Center");
        getContentPane().add(panel1, "South");
        panel1.setLayout(new GridLayout(0, 1));
        panel1.add(panInput);
        panel1.add(panel2);
        panel2.add(btnSend);
        panel2.add(btnClose);

        //设置组件属性
        txtContent.setEditable(false);
        txtContent.setFont(new Font("宋体", Font.PLAIN, 13));
        txtInput.setFont(new Font("宋体", Font.PLAIN, 15));
        txtContent.setLineWrap(true);
        txtInput.setLineWrap(true);
        txtInput.requestFocus();
        setSize(450, 350);
        setLocation(50, 200);
        setResizable(false);
        setVisible(true);

        //等候客户请求	
        try {
            txtContent.append("服务器已启动...\n");
            serverSocket = new ServerSocket(PORT);
            txtContent.append("等待客户请求...\n");
            socket = serverSocket.accept();
            txtContent.append("连接一个客户。\n" + socket + "\n");
            netIn = new DataInputStream(socket.getInputStream());
            netOut = new DataOutputStream(socket.getOutputStream());
        } catch (IOException e1) {
            e1.printStackTrace();
        }

        /

        //注册监听器,编写事件代码	
        txtContent.addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseMoved(MouseEvent e) {
                displayClientMsg();
            }
        });

        txtInput.addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseMoved(MouseEvent e) {
                displayClientMsg();
            }
        });

        panel2.addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseMoved(MouseEvent e) {
                displayClientMsg();
            }
        });

        txtInput.addKeyListener(new KeyAdapter() {
            public void keyTyped(KeyEvent e) {
                displayClientMsg();
            }
        });

        txtInput.addFocusListener(new FocusAdapter() {
            public void focusGained(FocusEvent e) {
                displayClientMsg();
            }
        });

        btnSend.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {

                    String serverMsg = txtInput.getText();
                    if (!serverMsg.trim().equals("")) {
                        txtContent.append("服务器>" + serverMsg + "\n");
                        netOut.writeUTF(serverMsg);
                    } else {
                        JOptionPane.showMessageDialog(null, "不能发送空信息!", "服务器", JOptionPane.WARNING_MESSAGE);
                    }

                    txtInput.setText("");
                    txtInput.requestFocus();
                } catch (IOException ie) {
                    ie.printStackTrace();
                }
            }
        });

        btnClose.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                try {
                    netIn.close();
                    netOut.close();
                    socket.close();
                    serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                System.exit(0);
            }
        });

        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                try {
                    netIn.close();
                    netOut.close();
                    socket.close();
                    serverSocket.close();
                } catch (IOException ie) {
                    ie.printStackTrace();
                }
                System.exit(0);
            }

            public void windowActivated(WindowEvent e) {
                txtInput.requestFocus();
            }
        });
    }

    //显示客户端信息
    void displayClientMsg() {
        try {
            if (netIn.available() > 0) {
                String clientMsg = netIn.readUTF();
                txtContent.append("客户端>" + clientMsg + "\n");
            }
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }
}

3. Testen Sie, ob der Server und der Client kommunizieren können

Starten Sie den Server auf dem lokalen Computer [192.168 .129.222]

So implementieren Sie ein einfaches Chat-Programm auf Basis von TCP in Java

Auf dem Remote-Computer [192.168.214.213] startet der Client

So implementieren Sie ein einfaches Chat-Programm auf Basis von TCP in Java und zeigt an, dass die Verbindung zum Server [192.168.129.222] erfolgreich ist. Wechseln Sie zum Server, um ihn anzuzeigen zeigt an, dass ein Client [192.168.214.213] verbunden ist

So implementieren Sie ein einfaches Chat-Programm auf Basis von TCP in JavaZu diesem Zeitpunkt können der Server und die Clients miteinander kommunizieren

So implementieren Sie ein einfaches Chat-Programm auf Basis von TCP in Java 4. Ideen zur Programmoptimierung – der Server verwendet Multithreading

In Tatsächlich dürfen mehrere Anwendungen auf viele serverseitige Programme zugreifen, z. B. auf Portale, auf die mehrere Benutzer gleichzeitig zugreifen können, sodass die Serverseite mehrere Threads aufweist.

So implementieren Sie ein einfaches Chat-Programm auf Basis von TCP in Java

Das obige ist der detaillierte Inhalt vonSo implementieren Sie ein einfaches Chat-Programm auf Basis von TCP in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen