java udp 报文_Java UDP 数据报

服务端,创建一个DatagramSocket对象,侦听在某个端口,创建一个DatagramPacket对象接受数据。收到客户端发来的信息后,有原封不动转发到客户端。

public class DatagramServerTest {

public static void main(String[] args) throws IOException {

byte[] buf = new byte[1024];

DatagramPacket packet = new DatagramPacket(buf, 1024);

DatagramSocket server = new DatagramSocket(9000); //侦听本机9000端口UDP数据包

server.receive(packet);

String str = new String(buf,0,packet.getLength());

System.out.println("server get msg -> "+packet.getAddress().getHostName()+":"+str);

server.send(new DatagramPacket(buf,packet.getLength(),packet.getAddress(),packet.getPort()));

server.close();

}

}

客户端,创建一个DatagramSocket对象和一个DatagramPacket对象(包含目的主机的端口号9000和IP地址),调用send方法,发送数据.然后调用receive接受服务器的回传@

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

import java.net.UnknownHostException;

public class DatagramClientTest {

public static void main(String[] args) throws IOException {

//创建UDP的Socket

InetAddress serverAddr = InetAddress.getByName("192.168.0.101");//目的主机IP地址

DatagramSocket client = new DatagramSocket();//本地端口随机,直接创建DatagramSocket

String str = "hello world, from " + InetAddress.getLocalHost().getHostName();

DatagramPacket packet = new DatagramPacket(str.getBytes(), str.length(), serverAddr, 9000);//目的主机端口号9000

client.send(packet);

byte[] buf = new byte[1024];

DatagramPacket pkt = new DatagramPacket(buf,1024);

client.receive(pkt);

String str1 = new String(buf,0,pkt.getLength());

System.out.println("client get -> "+packet.getAddress().getHostName()+":"+str1);

client.close();

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是Java拼接UDP报文的基本步骤: 1. 定义UDP报文的结构:UDP报文报文头和数据部分组成,报文头包括源端口号、目标端口号、报文长度和校验和等信息。 ```java public class UdpPacket { private int sourcePort; private int destPort; private int length; private int checksum; private byte[] data; // getter and setter methods } ``` 2. 计算UDP报文长度和校验和:根据UDP报文的结构,计算报文长度和校验和等信息。 ```java public class UdpUtils { public static int calculateChecksum(UdpPacket packet) { // 计算校验和 } public static int calculateLength(UdpPacket packet) { // 计算报文长度 } } ``` 3. 拼接UDP报文:将报文头和数据部分组合成完整的UDP报文。 ```java public class UdpUtils { public static byte[] buildPacket(UdpPacket packet) { byte[] packetData = new byte[packet.getLength()]; ByteBuffer buffer = ByteBuffer.wrap(packetData); buffer.putInt(packet.getSourcePort()); buffer.putInt(packet.getDestPort()); buffer.putInt(packet.getLength()); buffer.putInt(packet.getChecksum()); buffer.put(packet.getData()); return packetData; } } ``` 4. 发送UDP报文:使用Java的DatagramSocket类创建UDP套接字,并使用UDP套接字发送UDP报文。 ```java public class UdpClient { public static void main(String[] args) throws IOException { DatagramSocket socket = new DatagramSocket(); UdpPacket packet = new UdpPacket(); // 设置UDP报文内容 byte[] packetData = UdpUtils.buildPacket(packet); // 拼接UDP报文 InetAddress address = InetAddress.getByName("fpga_ip_address"); int port = 1234; DatagramPacket datagramPacket = new DatagramPacket(packetData, packetData.length, address, port); socket.send(datagramPacket); // 发送UDP报文 socket.close(); } } ``` 需要注意的是,在拼接UDP报文时需要按照网络字节序进行拼接,发送和接收UDP报文时也需要进行字节序的转换。此外,在计算UDP报文校验和时,需要使用UDP报文的伪头部进行计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值