Java Socket多人聊天小程序
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进行网络编程,并创建一个简单的多人聊天应用。
原文地址: https://www.cveoy.top/t/topic/fOxu 著作权归作者所有。请勿转载和采集!