gpt4 book ai didi

c# - 从 C# 客户端向 Java 服务器发送 4 字节消息头

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:06:45 24 4
gpt4 key购买 nike

我正在尝试将 C# 客户端编写到用 Java 编写的服务器。服务器需要一个 4 字节(Java 中的 DataInputSread readInt())消息头,后跟实际消息。

我对 C# 完全陌生,如何将此消息 header 发送到 Java 服务器?我尝试了几种方法(主要是反复试验,没有深入了解 C# 语言),但没有任何效果。 Java 端以不正确(非常大)的消息长度结束。

最佳答案

正如其他张贴者指出的那样,它是字节顺序。

Java DataInputStream期望数据为 big-endian (网络字节顺序)。从 Mono 文档(对于类似 BinaryWriter 的等价物)来看,C# 倾向于小端(Win32/x86 的默认设置)。

因此,当您使用标准类库将 32 位 int '1' 更改为 bytes 时,它们会产生不同的结果:

//byte hex values
Java: 00 00 00 01
C#: 01 00 00 00

您可以改变在 C# 中编写整数的方式:

private static void WriteInt(Stream stream, int n) {
for(int i=3; i>=0; i--)
{
int shift = i * 8; //bits to shift
byte b = (byte) (n >> shift);
stream.WriteByte(b);
}
}

编辑:

更安全的做法是:

private static void WriteToNetwork(System.IO.BinaryWriter stream, int n) {
n = System.Net.IPAddress.HostToNetworkOrder(n);
stream.Write(n);
}

关于c# - 从 C# 客户端向 Java 服务器发送 4 字节消息头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/92287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com