首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C#服务器和客户端TCP

C#服务器和客户端TCP
EN

Stack Overflow用户
提问于 2018-09-22 09:08:27
回答 1查看 112关注 0票数 0

问题出在GetBufferSize方法上,我发送的缓冲区大小为40,它返回了一个奇怪的数字54124。

为什么java的int字节码和C#的int字节码不同?

JAVA客户端

代码语言:javascript
复制
mBufferOut = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), UTF8)), true);

private void sendMessage(final String message) {

    if (mBufferOut != null && message != null) {
        try {
            Log.d("_TAG", "Message length: " + Integer.toString(message.length()));

            Log.d("_TAG", "Sending: " + message);
            mBufferOut.print(message.length());
            mBufferOut.flush();
            mBufferOut.print(message);
            mBufferOut.flush();
        } catch (Exception e1) {
            e1.printStackTrace();
        }
    }
}

上面的代码发送两条消息:第一条是缓冲区大小,第二条是数据本身。

C#服务器

代码语言:javascript
复制
private void Read() {
    int size = GetBufferSize();

    byte[] myReadBuffer = new byte[size];
    int numberOfBytesRead = 0;
    string str = "";

    do
    {
        numberOfBytesRead = networkStream.Read(myReadBuffer, 0, myReadBuffer.Length);

        str = Encoding.UTF8.GetString(myReadBuffer, 0, numberOfBytesRead);
    } while (networkStream.DataAvailable);
}

private int GetBufferSize()
{
    byte[] myReadBuffer = new byte[4];
    int numberOfBytesRead = 0;

    do
    {
        numberOfBytesRead = networkStream.Read(myReadBuffer, 0, myReadBuffer.Length);
    } while (networkStream.DataAvailable);

    if (numberOfBytesRead > 0)
    {
        return BitConverter.ToInt32(myReadBuffer, 0);
    }
    else
    {
        return 0;
    }
}

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2018-09-22 09:14:38

很可能您遇到了有关字节顺序的问题。Java以高字节顺序存储数据,而.NET根据您的系统架构存储数据。如果您使用的是x86机器,那么您很可能正在尝试读取大端数据,就好像它是小端数据一样。在读取字节数组之前,您必须反转它

代码语言:javascript
复制
            if (BitConverter.IsLittleEndian)
            {
                Array.Reverse(buffer);
            }

Here's more info in endianness.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52452644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档