赞
踩
本学期计算机网络课程要求完成一个TCP和一个UDP的通信程序,我完成了功能的简单实现。我在上一篇博客已经讲了TCP的具体实现,接下来讲一讲UDP程序的实现。
以下是具体实现过程:
UDPClient:UDP客户端的核心代码部分;
UDPServer:UDP服务器端的核心代码部分;
UDPFrame:UDP客户端和服务器端的界面搭建;
UDPSend:UDP客户端或服务器端的一端向另一端发送消息;
UDPReceive:UDP客户端或服务器端的一端接收另一端发送的消息;
ReminderTextAdapter:网上查阅的代码,非核心内容实现部分,主要用于灰色提示字hint功能的实现(swing中的实现方法不太熟悉);
注:在UDP通信中,没有TCP那样明确的ServerSocket,只是通过Datagram数据报的方式传递给另外的DatagramSocket,因此本项目中虽然有客户端与服务器端的区别,但本质上二者并无区别(即客户端与服务器端实现方式基本相同),因此客户端和服务器端需要的界面布局也相同,故我也把二者的界面抽取成了一个类,在此特地说明一下。
代码如下:
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(); } }
代码如下:
package udpCommunication;
import javax.swing.*;
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。