用Java.swing图形框架写一个p2p聊天系统,要求使用TCP协议
时间: 2023-05-30 21:05:32 浏览: 231
java p2p 聊天软件
5星 · 资源好评率100%
由于该任务涉及到网络编程和图形框架,需要一定的Java编程基础。以下是一个简单的p2p聊天系统的实现过程,使用Java.swing图形框架和TCP协议。
1. 创建服务器和客户端
在这个任务中,我们需要创建一个服务器和两个客户端。服务器负责转发消息,客户端可以发送和接收消息。我们使用Java的Socket类来创建TCP连接,使用Java的ServerSocket类来启动服务器。
```
//创建服务器
ServerSocket server = new ServerSocket(8888);
Socket socket1 = server.accept(); //接收客户端1连接
Socket socket2 = server.accept(); //接收客户端2连接
//创建客户端1
Socket socket1 = new Socket("localhost", 8888);
//创建客户端2
Socket socket2 = new Socket("localhost", 8888);
```
2. 创建图形界面
我们使用Java的swing图形框架来创建图形用户界面,包括文本框、按钮等控件,以便用户可以输入消息并发送给其他客户端。
```
JFrame frame = new JFrame("P2P聊天系统");
frame.setSize(500, 500);
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
JTextArea textArea = new JTextArea();
JTextField textField = new JTextField();
JButton sendButton = new JButton("发送");
panel.add(textArea, BorderLayout.CENTER);
panel.add(textField, BorderLayout.SOUTH);
panel.add(sendButton, BorderLayout.EAST);
frame.add(panel);
frame.setVisible(true);
```
3. 实现发送和接收消息
我们使用Java的InputStream和OutputStream类来实现消息的发送和接收。当用户在客户端1中输入消息并点击发送按钮时,客户端1将消息发送到服务器,服务器将该消息转发给客户端2。客户端2接收到消息后,在自己的客户端界面上显示该消息。
```
//客户端1发送消息
OutputStream out = socket1.getOutputStream();
out.write(textField.getText().getBytes());
//服务器接收消息并转发给客户端2
InputStream in = socket1.getInputStream();
byte[] buffer = new byte[1024];
int length = in.read(buffer);
OutputStream out2 = socket2.getOutputStream();
out2.write(buffer, 0, length);
//客户端2接收消息
InputStream in2 = socket2.getInputStream();
byte[] buffer2 = new byte[1024];
int length2 = in2.read(buffer2);
textArea.append(new String(buffer2, 0, length2));
```
4. 完整代码
下面是一个完整的p2p聊天系统代码实现。需要注意的是,该代码只是一个简单的示例,需要根据实际需求进行修改和完善。
```
import javax.swing.*;
import java.awt.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class P2PChatSystem {
public static void main(String[] args) throws IOException {
//创建服务器
ServerSocket server = new ServerSocket(8888);
Socket socket1 = server.accept(); //接收客户端1连接
Socket socket2 = server.accept(); //接收客户端2连接
//创建客户端1
Socket socket1 = new Socket("localhost", 8888);
//创建客户端2
Socket socket2 = new Socket("localhost", 8888);
//创建图形界面
JFrame frame = new JFrame("P2P聊天系统");
frame.setSize(500, 500);
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
JTextArea textArea = new JTextArea();
JTextField textField = new JTextField();
JButton sendButton = new JButton("发送");
panel.add(textArea, BorderLayout.CENTER);
panel.add(textField, BorderLayout.SOUTH);
panel.add(sendButton, BorderLayout.EAST);
frame.add(panel);
frame.setVisible(true);
//客户端1发送消息
sendButton.addActionListener(e -> {
try {
OutputStream out = socket1.getOutputStream();
out.write(textField.getText().getBytes());
} catch (IOException ex) {
ex.printStackTrace();
}
});
//服务器接收消息并转发给客户端2
new Thread(() -> {
try {
InputStream in = socket1.getInputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) != -1) {
OutputStream out2 = socket2.getOutputStream();
out2.write(buffer, 0, length);
}
} catch (IOException ex) {
ex.printStackTrace();
}
}).start();
//客户端2接收消息
new Thread(() -> {
try {
InputStream in2 = socket2.getInputStream();
byte[] buffer2 = new byte[1024];
int length2;
while ((length2 = in2.read(buffer2)) != -1) {
textArea.append(new String(buffer2, 0, length2));
}
} catch (IOException ex) {
ex.printStackTrace();
}
}).start();
}
}
```
阅读全文