使用 UDP 进行 Java 套接字编程

我正在尝试使用服务器客户端发送一些数字和哈希。我正在使用 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");


    }


}


白猪掌柜的
浏览 116回答 1
1回答

POPMUISE

您正在从服务器发送十六进制编码的数据。那么你的客户不应该再次转换那个十六进制DatatypeConverter.printHexBinary(num)而不是客户做&nbsp; &nbsp;String n2 = (n1.replace("Clue: ", ""));&nbsp; &nbsp;byte[] num = n2.getBytes(StandardCharsets.UTF_8);&nbsp; &nbsp;String num1 = DatatypeConverter.printHexBinary(num);&nbsp; &nbsp;clue.add(i1, num1);做就是了&nbsp;String n2 = (n1.replace("Clue: ", ""));&nbsp;clue.add(i1, n2);(并在else您的客户的条款中进行类似的操作。)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java