import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class ChatClient {
    private JTextArea incoming;
    private JTextField outgoing;
    private PrintWriter writer;
    private Socket socket;

    public static void main(String[] args) {
        new ChatClient().go();
    }

    public void go() {
        JFrame frame = new JFrame('Chat Client');
        JPanel panel = new JPanel();
        incoming = new JTextArea(15, 50);
        incoming.setLineWrap(true);
        incoming.setWrapStyleWord(true);
        incoming.setEditable(false);
        JScrollPane scrollPane = new JScrollPane(incoming);
        scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        outgoing = new JTextField(20);
        JButton sendButton = new JButton('Send');
        sendButton.addActionListener(new SendButtonListener());
        panel.add(scrollPane);
        panel.add(outgoing);
        panel.add(sendButton);
        setUpNetworking();
        Thread readerThread = new Thread(new IncomingReader());
        readerThread.start();
        frame.getContentPane().add(BorderLayout.CENTER, panel);
        frame.setSize(600, 400);
        frame.setVisible(true);
    }

    private void setUpNetworking() {
        try {
            socket = new Socket('localhost', 5000);
            writer = new PrintWriter(socket.getOutputStream());
            System.out.println('networking established');
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public class SendButtonListener implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            try {
                writer.println(outgoing.getText());
                writer.flush();
            } catch (Exception e) {
                e.printStackTrace();
            }
            outgoing.setText('');
            outgoing.requestFocus();
        }
    }

    public class IncomingReader implements Runnable {
        public void run() {
            try {
                Scanner reader = new Scanner(socket.getInputStream());
                while (reader.hasNextLine()) {
                    String message = reader.nextLine();
                    incoming.append(message + '
');
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

这段代码使用Java Swing创建了一个简单的聊天小程序图形界面,并利用Socket实现了多人聊天功能。用户可以在文本框中输入消息,点击发送按钮将消息发送到服务器,服务器再将消息广播给所有连接的客户端。每个客户端都会接收到其他客户端发送的消息并显示在聊天窗口中。

需要注意的是:

  • 此示例代码假设服务器运行在本地主机('localhost'),端口号为5000。
  • 你需要先启动服务器程序,客户端才能正常连接并进行通信。
  • 可以根据实际情况修改代码中的服务器地址和端口号。

希望这段代码能够帮助你理解如何使用Java Socket进行网络编程,并创建一个简单的多人聊天应用。

Java Socket多人聊天小程序

原文地址: https://www.cveoy.top/t/topic/fOxu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录