c# - 将 unsigned long long 从 C++ 服务器流式传输到 C# 客户端

标签 c# c++ sockets stream streaming

我相信读者不需要更多代码,但如果您需要查看更多代码,请告诉我。

我需要将字节从 C++ 服务器流式传输到 C# 客户端。我能够写入和读取大多数变量,除非遇到需要发送的 unsigned long long

由于 C# 中没有 unsigned long long,我尝试将字节读取为两个整数(一次 4 个字节),但它不起作用:即使我消耗 8 个字节,流仍然有要读取的字节字节。看到评论部分了吗?如果我取消对它们的注释并执行,它们会填充垃圾数据,这意味着流中有超过 8 个字节..

有人能告诉我哪里错了吗? C++ 库非常包含,我没有接触它,它适用于大多数变量(和其他应用程序),除了现在和我的情况。如何在 C++ 和 C# 之间发送/读取/存储一个 unsigned long long?

建议:要不先把unsigned long long转成两个int,再把两个都送过去?

C++:

stmOstream& MyClass :: SendToClient( stmOstream& aStream ) const
{
   unsigned long long DoomedVariable;
   aStream << DoomedVariable;

   return aStream;
}

C#:

NetworkStream myStream;
mSocket = new TcpClient();
await mSocket.ConnectAsync(IPAddress.Parse("127.0.0.1"), 11111);
myStream= mSocket.GetStream();

private async Task ReadBytes( byte[] InBuffer, int SizeNeeded)
{
    int ReadyBytes = await myStream.ReadAsync( readBuffer, 0, SizeNeeded);

    while ( ReadyBytes != SizeNeeded)
    {
        lBytesReady += await myStream.ReadAsync( InBuffer, ReadyBytes , SizeNeeded- ReadyBytes );
    }
}

private async Task<int> ReadReply( )
{
    byte[] lReadBuffer = new byte[ 2048 ];
    await ReadBytes( lReadBuffer, 4 );
    int FirstHalf = BitConverter.ToInt32( lReadBuffer, 0 );

    await ReadBytes( lReadBuffer, 4 );
    int SecondHalf = BitConverter.ToInt32( lReadBuffer, 0 );

    //await ReadBytes( lReadBuffer, 4 );
    //int JunkData = BitConverter.ToInt32( lReadBuffer, 0 );

    //await ReadBytes( lReadBuffer, 4 );
    //JunkData = BitConverter.ToInt32( lReadBuffer, 0 );

    //await ReadBytes( lReadBuffer, 4 );
    //JunkData = BitConverter.ToInt32( lReadBuffer, 0 );

    //await ReadBytes( lReadBuffer, 4 );
    //JunkData = BitConverter.ToInt32( lReadBuffer, 0 );
}

最佳答案

将 64 位 long long 转换为两个 int:

unsigned int firstHalf = DoomedVariable & 0xFFFFFFFF; //first four bytes
unsigned int secondHalf = (DoomedVariable >> 32) & 0xFFFFFFFF; //last four bytes

在 C++ 中,long long 是“至少”64 位,因此可能值得看看它在您的平台上有多大

printf("%d", sizeof(unsigned long long));

关于c# - 将 unsigned long long 从 C++ 服务器流式传输到 C# 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56294081/

相关文章:

c# - asp.net 从代码隐藏中手动添加一行

c# - 如何使用 Json.net 反序列化从 Exception 类派生的对象?

c# - 如何使用SharpDX绘制文字?

c# - 修改单词的最后一个字母?

c++ - 即使我获得类窗口的句柄,BringWindowToTop 也不起作用

c# - 通用通信框架的模式(处理和公开接收到的数据)

1 分钟后 iphone socket 断开连接

c++ - C/C++ 中的跨平台线程/静态变量 fork

C++ Builder XE5 链接器错误 LME1641

java - 如何在 Java 中获取监听服务器端口?