当前位置:   article > 正文

Java实现简易UDP客户端、服务器端通信程序_java 创建一个udp服务

java 创建一个udp服务

本学期计算机网络课程要求完成一个TCP和一个UDP的通信程序,我完成了功能的简单实现。我在上一篇博客已经讲了TCP的具体实现,接下来讲一讲UDP程序的实现。



效果展示

初始界面
连接成功
互发消息

以下是具体实现过程:

一、项目结构

项目结构

下面说说每个类的具体作用:

UDPClient:UDP客户端的核心代码部分;
UDPServer:UDP服务器端的核心代码部分;
UDPFrame:UDP客户端和服务器端的界面搭建;
UDPSend:UDP客户端或服务器端的一端向另一端发送消息;
UDPReceive:UDP客户端或服务器端的一端接收另一端发送的消息;
ReminderTextAdapter:网上查阅的代码,非核心内容实现部分,主要用于灰色提示字hint功能的实现(swing中的实现方法不太熟悉);

注:在UDP通信中,没有TCP那样明确的ServerSocket,只是通过Datagram数据报的方式传递给另外的DatagramSocket,因此本项目中虽然有客户端与服务器端的区别,但本质上二者并无区别(即客户端与服务器端实现方式基本相同),因此客户端和服务器端需要的界面布局也相同,故我也把二者的界面抽取成了一个类,在此特地说明一下。

二、完整代码

1.UDPClient

代码如下:

package udpCommunication;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPClient implements ActionListener, Runnable {
   
    private DatagramSocket datagramSocket;
    private Thread thread = null;
    private UDPFrame clientFrame;

    public UDPClient() {
   
        JPanel panel = new JPanel();

        clientFrame = new UDPFrame("UDPClient");
        clientFrame.add(panel);

        clientFrame.placeComponents(panel);
        clientFrame.setVisible(true);

        clientFrame.getConnect().addActionListener(e -> {
   
            try {
   
                //host:"127.0.0.1"
                //String host = UDPClientFrame.getIpField().getText();
                //port:8887
                int dSocketPort = Integer.parseInt(clientFrame.getDSocketField().getText());
                datagramSocket = new DatagramSocket(dSocketPort);
                clientFrame.getTextArea().append("[连接] : 正在连接中……\n");
                clientFrame.getTextArea().append("\t连接成功\n");

                thread = new Thread(this);
                thread.setPriority(Thread.MIN_PRIORITY);
                thread.start();
            } catch (IOException ex) {
   
                ex.printStackTrace();
            }
        });

        clientFrame.getTransmit().addActionListener(this);
        clientFrame.getTextArea().append("……UDP客户端启动……\n");
        System.out.println("……UDP客户端启动……\n");

    }

    public static void main(String[] args) {
   
        new UDPClient();
    }

    //向服务器端发送数据
    @Override
    public void actionPerformed(ActionEvent e) {
   
        //String send = UDPClientFrame.getSendField().getText();
        //port:8888
        //发送消息
        new UDPSend(datagramSocket, clientFrame, "客户端").sendMessages();
    }

    //使用线程处理客户端接收服务器端的数据
    @Override
    public void run() {
   
        byte[] bytes = new byte[1024];
        DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
        new UDPReceive(datagramSocket, datagramPacket, clientFrame, "服务器端").receiveMessages();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76

2.UDPServer

代码如下:

package udpCommunication;

import javax.swing.*;
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/146670
推荐阅读
相关标签
  

闽ICP备14008679号