我正在尝试使用服务器客户端发送一些数字和哈希。我正在使用 UDP 协议来做到这一点。我按照预期使用数字或散列创建了一个数据包,并使用套接字发送它。客户端接收它,因此,只打印接收到的值。但是当我在客户端收到数字和哈希时,我没有得到相同的结果。可能的问题是什么?我正在提供我的服务器和客户端代码以及我在这里得到的输出。服务器代码:import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.nio.charset.StandardCharsets;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;import java.util.ArrayList;import javax.xml.bind.DatatypeConverter;public class main { public static void main(String[] args) throws IOException, NoSuchAlgorithmException { int n = 10; SecureRandom rand = new SecureRandom(); ArrayList<String> clue = new ArrayList<String>(); ArrayList<String> cluenum = new ArrayList<String>(); MessageDigest digestnew = MessageDigest.getInstance("SHA-256"); byte[] finalmsgblock = "End".getBytes(); for(int i = 0; i < n; i++) { int num = rand.nextInt(100); String num1 = Integer.toString(num); byte[] num2 = digestnew.digest(num1.getBytes(StandardCharsets.UTF_8)); String num3 = "Clue: " + DatatypeConverter.printHexBinary(num2); clue.add(i,num3); cluenum.add(i, num1); } System.out.println(clue); System.out.println(cluenum); // Create a Socket DatagramPacket packet, packet1; InetAddress address; DatagramSocket socket; socket = new DatagramSocket(); address = InetAddress.getByName("127.0.0.1"); }}
1 回答
POPMUISE
TA贡献1765条经验 获得超5个赞
您正在从服务器发送十六进制编码的数据。那么你的客户不应该再次转换那个十六进制DatatypeConverter.printHexBinary(num)
而不是客户做
String n2 = (n1.replace("Clue: ", ""));
byte[] num = n2.getBytes(StandardCharsets.UTF_8);
String num1 = DatatypeConverter.printHexBinary(num);
clue.add(i1, num1);
做就是了
String n2 = (n1.replace("Clue: ", ""));
clue.add(i1, n2);
(并在else您的客户的条款中进行类似的操作。)
添加回答
举报
0/150
提交
取消