当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《从C#客户端向Java服务器发送4字节消息头》经验,为你挑选了1个好方法。

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

我是C#的新手,如何将此消息头发送到Java Server?我尝试了几种方法(主要是试验和错误,而没有深入到C#语言),没有任何效果.Java端最终得到了错误的(非常大的)消息长度.



1> McDowell..:

正如其他海报所指出的那样,它一直是字节序.

Java DataInputStream期望数据是big-endian(网络字节顺序).从Mono文档(对于像BinaryWriter这样的等价文件)来看,C#倾向于小端(Win32/x86的默认值).

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

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

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

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);
}

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有