- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用服务器客户端发送一些数字和哈希值。我正在使用 UDP 协议(protocol)来执行此操作。正如我所期望的那样,我使用数字或哈希创建了一个数据包,并使用套接字发送它。客户端收到它后,只打印收到的值。但是当我在客户端收到数字和哈希值时,我没有得到相同的结果。可能的问题是什么?
我在这里提供我的服务器和客户端代码以及我得到的输出。
服务器代码:
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");
for(int i = 0; i < n; i++)
{
byte[] newdata = clue.get(i).getBytes(StandardCharsets.UTF_8);
packet = new DatagramPacket (newdata, newdata.length, address, 1502);
socket.send(packet);
System.out.println("Sent clue!");
byte[] newdata1 = cluenum.get(i).getBytes(StandardCharsets.UTF_8);
packet1 = new DatagramPacket (newdata1, newdata1.length, address, 1502);
socket.send(packet1);
System.out.println("Sent cluenum!");
}
DatagramPacket packet11 = new DatagramPacket (finalmsgblock, finalmsgblock.length, address, 1502);
socket.send(packet11);
}
}
客户端代码:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.util.ArrayList;
import javax.xml.bind.DatatypeConverter;
public class main {
public static void main(String[] args) throws IOException {
int n = 10;
SecureRandom rand = new SecureRandom();
ArrayList<String> clue = new ArrayList<String>();
ArrayList<String> cluenum = new ArrayList<String>();
// Create the socket
int port = 1502;
DatagramSocket socket;
byte[] buf = new byte[10000];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
InetAddress address = InetAddress.getByName("127.0.0.1");
socket = new DatagramSocket(port, address);
int i1 = 0;
int i2 = 0;
while(true)
{
socket.receive (packet);
byte[] data = new byte[packet.getLength()];
System.arraycopy(packet.getData(), packet.getOffset(), data, 0, packet.getLength());
String n1 = new String(data);
if(new String(data).equals("End"))
{
break;
}
else
{
if(n1.startsWith("Clue: "))
{
String n2 = (n1.replace("Clue: ", ""));
byte[] num = n2.getBytes(StandardCharsets.UTF_8);
String num1 = DatatypeConverter.printHexBinary(num);
clue.add(i1, num1);
i1 = i1 + 1;
}
else
{
byte[] num = n1.getBytes(StandardCharsets.UTF_8);
String num1 = DatatypeConverter.printHexBinary(num);
cluenum.add(i2, num1);
i2 = i2 + 1;
}
}
}
System.out.println(clue);
System.out.println(cluenum);
}
}
我得到的输出如下:
服务器输出:
[Clue: BBB965AB0C80D6538CF2184BABAD2A564A010376712012BD07B0AF92DCD3097D,
Clue: 44C8031CB036A7350D8B9B8603AF662A4B9CDBD2F96E8D5DE5AF435C9C35DA69,
Clue: 6E4001871C0CF27C7634EF1DC478408F642410FD3A444E2A88E301F5C4A35A4D,
Clue: A46E37632FA6CA51A13FE39A567B3C23B28C2F47D8AF6BE9BD63E030E214BA38,
Clue: C837649CCE43F2729138E72CC315207057AC82599A59BE72765A477F22D14A54,
Clue: CD70BEA023F752A0564ABB6ED08D42C1440F2E33E29914E55E0BE1595E24F45A,
Clue: 7902699BE42C8A8E46FBBB4501726517E86B22C56A189F7625A6DA49081B2451,
Clue: 19581E27DE7CED00FF1CE50B2047E7A567C76B1CBAEBABE5EF03F7C3017BB5B7,
Clue: EF2D127DE37B942BAAD06145E54B0C619A1F22327B2EBBCFBEC78F5564AFE39D,
Clue: 1A6562590EF19D1045D06C4055742D38288E9E6DCD71CCDE5CEE80F1D5A774EB]
[83, 84, 93, 82, 57, 89, 7, 9, 5, 50]
客户端输出:[4242423936354142304338304436353338434632313834424142414432413536344130313033373637313230313242443037423041463932444344333 0393744, 343443383033314342303336413733353044384239423836303341463636324134423943444244324639364538443544453541463433354339 43333544413639, 36453430303138373143304346323743373633344546314443343738343038463634323431304644334134343445324138384533303 146354334413335413444、4134364533373633324641364341353141313346453339413536374233433233423238433246343744384146364245394244 3633453033304532313442413338、433833373634394343453433463237323931333845373243433331353230373035374143383235393941353942453 73237363541343737463232443134413534、43443730424541303233463735324130353634414242364544303844343243313434304632453333453239 393134453535453042453135393545323446343541, 3739303236393942453432433841384534364642424234353031373236353137453836423232433 5364131383946373632354136444134393038314232343531, 313935383145323744453743454430304646314345353042323034374537413536374337 36423143424145424142453545463033463743333031374242354237、 45463244313237444533374239343242414144303631343545353442304336313 941314632323332374232454242434642454337384635353634414645333944、3141363536323539304546313944313034354430364334303535373432 4433383238384539453644434437314343444535434545383046314435413737344542][3833、3834、3933、3832、3537、3839、37、39、35、3530]
我尝试过,但无法格式化客户端输出
编辑:我尝试过仅发送号码,但仍然不起作用。请告诉我可能出现的问题是什么?
最佳答案
您正在从服务器发送十六进制编码的数据。那么您的客户端不应再次使用 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
子句中执行类似操作。)
关于使用 UDP 的 Java 套接字编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52799186/
我刚刚了解了 udp 校验和计算。 但我很困惑算法是否检测到所有错误。 最佳答案 当然不是。没有校验和可以检测到所有错误。 关于udp - UDP 校验和是否检测到所有错误?,我们在Stack Ove
下面这个函数有什么问题?? 它应该抛出错误,因为我没有在本地主机上运行 UDP 服务器。 int openUdpSocket(int port) { int sock,sin_size;
我正在尝试修改这两个程序。我想让 udpclient.c 能够接收消息并让 udpserver.c 将消息回显给客户端。我还想在 udpclient 发送消息之前先获取它们的时间标记消息。收到的消息应
我有相当简单的 UDP 服务器写在 c 上。 有时我需要知道在套接字中排队的所有 udp 数据包(字节)的当前长度。 据我了解,getsockopt 没有得到这样的信息。 欢迎使用 Linux 和 F
除了直播音乐/视频外,谁能告诉在哪里使用 UDP 协议(protocol)? UDP 的默认用例是什么? 最佳答案 其他任何您需要性能但如果数据包在途中丢失时可以生存的东西。例如,多人游戏浮现在脑海中
与 TCP 的监视方法相反,UDP 是否会在所有数据包可用时立即发送它们? 谢谢。 最佳答案 TCP 有拥塞控制,UDP 没有,因为它是无连接的。 但是您的问题涉及多个问题:发送消息是否会导致立即发送
我知道 UDP 本质上是不可靠的,但是当连接到 localhost 时,我希望内核以不同的方式处理连接,因为一切都可以在内部处理。那么在这种特殊情况下,UDP 是否被认为是一种可靠的协议(protoc
我正在尝试使用 flash 和 rtmfp 协议(protocol)开发一个实时视频聊天应用程序,但我有疑问rtmfp 如何保证连接对等点,尤其是当对等点位于不同网络时。 最佳答案 RTMFP 依靠中
我发现所有使用 Netty 4.0 的 TCP 服务器实现都使用了 ServerBootstrap 实例。 The biggest and only difference between a serv
对于个人 MMO 游戏项目,我正在 java 中实现一个自制的可靠的基于 UDP 的协议(protocol)。鉴于我当前的设置,我相信窥探者劫持 session 相对简单,因此为了防止这种情况,我借此
我正在尝试手动计算各种 UDP 数据包的校验和,但与 Wireshark 中显示的结果相比,我总是得到错误的结果。下面是我如何做到这一点的示例: Source Address: 192.168.0.1
我正在尝试手动计算各种 UDP 数据包的校验和,但与 Wireshark 中显示的结果相比,我总是得到错误的结果。下面是我如何做到这一点的示例: Source Address: 192.168.0.1
我有一个奇怪的问题。我有一个成功运行的 C++ (boost asio) P2P 应用程序,它可以在大多数 NAT 上运行。问题是,当我将初始启动端口号指定为 1000 时,它会检查 1000 是否空
带有数据源的短 radio 链路,需要通过 IPv6 的 1280 Kbps 吞吐量,使用 UDP 停止和等待协议(protocol),该区域内没有其他客户端或明显的噪声源。我到底如何才能计算出最佳数
似乎可以在没有有效负载的情况下发送 UDP 数据包。 我能想到的唯一不需要有效载荷的就是用于 NAT 打洞。 这还能用来做什么? 这与我之前的问题有关Under Linux, can recv eve
我有一个客户端,我无法更改其代码 - 但我想(重新)使用 编写代码ZeroMQ socket 。 客户端同时使用原始 TCP 和原始 UDP socket 。 我知道我可以使用 ZMQ_ROUTER_
网络 4.0.24 我通过 UDP 传递 XML。收到 UPD 数据包时,数据包的长度始终为 2048,截断消息。尽管如此,我尝试将接收缓冲区大小设置为更大的值(4096、8192、65536),但它
我正在尝试编写一个有关 UDP 连接的简单程序来了解它们。我已经实现了一些基本的事情,但是当我尝试发送并取回我发送的内容时,我遇到了一些问题,例如, 当我这样做时;发送一个字符串 “asd”到服务器我
当我检查时,我在 UDP 客户端每 100 毫秒从服务器发送 UDP 数据包 接收频率不等于 100 毫秒,有时它要少得多,例如 3 毫秒…10 毫秒。 我知道UDP client server是异步
海友我是一个学习winsock2的新手。以下是我的udp服务器和客户端程序。 我这个程序客户端不知道服务器的IP地址,只知道端口。但是服务器会在整个网络中广播一条消息。 当客户端收到消息时,它会回溯服
我是一名优秀的程序员,十分优秀!