Java实现简易TCP客户端、服务器端通信程序

这篇博客分享了作者在计算机网络课程中完成的一个简易TCP通信程序。包括TCPClient和TCPServer的实现,详细介绍了每个类的功能,如TCPClientFrame用于客户端界面,TCPServerFrame用于服务器端界面,而TCPSend则负责信息的发送。虽然实现了基本的通信功能,但项目仍有待扩展,如增加多客户端交互等特性。
摘要由CSDN通过智能技术生成

本学期计算机网络课程要求完成一个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
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值