本学期计算机网络课程要求完成一个TCP和一个UDP的通信程序,我完成了功能的简单实现,下面讲讲我的TCP程序的实现。(UDP的见另一篇博客)
目录
效果展示
以下是具体实现过程:
一、项目结构
下面说说每个类的具体作用:
TCPClient:TCP客户端的核心代码部分;
TCPClientFrame:TCP客户端的界面搭建;
TCPServer:TCP服务器端的核心代码部分;
TCPServerFrame:TCP服务器端的界面搭建;
TCPSend:客户端和服务器端发送信息的功能实现;
ReminderTextAdapter:网上查阅的代码,非核心内容实现部分,主要用于灰色提示字hint功能的实现(swing中的实现方法不太熟悉);
二、完整代码
1.TCPClient
代码如下:
package tcpCommunication;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.Socket;
public class TCPClient implements ActionListener, Runnable {
private TCPClientFrame clientFrame;
private Socket socket;
private Thread thread = null;
private DataInputStream inFromServer;
private DataOutputStream outToServer;
public TCPClient() {
JPanel panel = new JPanel();
clientFrame = new TCPClientFrame("TCPClient");
clientFrame.add(panel);
clientFrame.placeComponents(panel);
clientFrame.setVisible(true);
clientFrame.getConnect().addActionListener(e -> {
try {
//host:"127.0.0.1"
String host = clientFrame.getIpField().getText();
//port:6666
int port = Integer.parseInt(clientFrame.getPortField().getText());
socket = new Socket(host, port);
clientFrame.getTextArea().append("[Connect] : Connect…\n");
inFromServer = new DataInputStream(socket.getInputStream());
outToServer = new DataOutputStream(socket.getOutputStream());
//new TCPSend(socket, "客户端").sendMessage();
thread = new Thread(this);
thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
} catch (IOException ex) {
ex.printStackTrace();
}
});
clientFrame.getTransmit().addActionListener(this);
System.out.println("TCP客户端准备就绪\n");
}
public static void main(String[] args) {
new TCPClient();
}
//向服务器端发送数据
@Override
public void actionPerformed(ActionEvent e) {
String send = clientFrame.getSendField().getText();
new TCPSend(send, outToServer, clientFrame.getTextArea(),
"Client").sendMessages();
}
//使用线程处理客户端接收服务器端的数据
@Override
public void run() {
while (true) {
try {
clientFrame.getTextArea().append("[Server send] : " + inFromServer.readUTF() + "\n");
Thread.sleep(100);
} catch (IOException | InterruptedException e) {
//e.printStackTrace();
System.out.println("客户端与服务器连接中断\n");
break;
}
}
}
}
2.TCPClientFrame
代码如下:
package tcpCommunication;
import udpCommunication.ReminderTextAdapter;
import javax.swing.*;
import java.awt.*;
public class TCPClientFrame extends JFrame {
private static JTextField ipField;
private static JTextField portField;
private static JTextField sendField;
private static JTextArea textArea