udp 接收数据转换

今天在工作中,用udp进行网络通信的时候,client端接收数据后,为了检验正确性,把byte[]转换成十六进制字符串打印。但输出的十六进制字符串中除了server端发送的内容外,后面还有很多的0。

例:

本来的结果应该是:

61616161616101000000D8010F00000069703B63656C6C69643B6273736964

转换后的结果却是:61616161616101000000D8010F00000069703B63656C6C69643B62737369640000000000000000000000000000000000000000……

后来查找发现:原来 是写的转换方法有问题。


public static String bytes2HexString(byte[] b) {
String ret = "";
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
ret += hex.toUpperCase();
}
return ret;
}

这个转换方法里,是直接用b的长度来实现的。但是在udp接收数据时,可能一次接到的数据长度达不到定义的buffer长度。但在转换的时候却是直接用byte[]长度来访问的。所以导致把接到的数据后面的空的也转换出来,用0填补。把方法改成下面的之后,就可以。

/*
*byte[] :要转换的byte数组

*int: 要转换的byte数组的长度

*/

public static String bytes2HexString(byte[] b,int len) {
String ret = "";
for (int i = 0; i < len; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
ret += hex.toUpperCase();
}
return ret;
}



转换的时候要按byte[]的实际长度。


以上仅作笔记。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用C#编写程序来发送和接收UDP数据。下面是一个简单的示例代码,演示了如何发送和接收UDP数据包。 首先,你需要引用System.Net命名空间,它包含了用于UDP通信的相关类。 ```csharp using System; using System.Net; using System.Net.Sockets; class Program { static void Main() { // 发送数据 UdpClient udpClient = new UdpClient(); byte[] sendData = System.Text.Encoding.ASCII.GetBytes("Hello, UDP Server!"); IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("服务器IP"), 12345); udpClient.Send(sendData, sendData.Length, serverEndPoint); // 接收数据 UdpClient receivingUdpClient = new UdpClient(12345); // 绑定本地端口 IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); byte[] receivedData = receivingUdpClient.Receive(ref remoteEndPoint); string receivedMessage = System.Text.Encoding.ASCII.GetString(receivedData); Console.WriteLine("Received: " + receivedMessage); udpClient.Close(); receivingUdpClient.Close(); } } ``` 在上面的代码中,你需要将"服务器IP"替换为实际的服务器IP地址。程序首先创建一个`UdpClient`对象,该对象用于发送UDP数据包。使用`Encoding.ASCII.GetBytes`将消息转换为字节数组,并通过`Send`方法将数据包发送到指定的服务器端IP和端口。 然后,代码创建另一个`UdpClient`对象,用于接收UDP数据包。使用指定的本地端口号来监听接收的数据包。使用`Receive`方法接收数据,并使用`Encoding.ASCII.GetString`将接收到的字节数组转换为字符串。 请注意,这只是一个简单的示例,你需要根据你的实际需求进行适当的修改和错误处理。 希望这能帮到你!如果有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值