【问题标题】:TCP C++ client to receive a byte array from a c# serverTCP C++ 客户端从 C# 服务器接收字节数组
【发布时间】:2019-01-09 00:32:53
【问题描述】:

我有一个 C++ 客户端正在等待来自使用 winsock2 的 C# 服务器的答复。 C# 服务器将答案作为字节数组发送。 C++ 客户端以负值接收它。 我尝试在 C++ 中使用 unsigned char 数组,但 winock 在 recv() 函数中不支持它。 我错过了什么?

C#端:

private void Send(byte[] arrayToSend, NetworkStream stream)
{
if (stream.CanWrite) { stream.Write(arrayToSend, 0, arrayToSend.Length); stream.Flush(); }
else { ... }
}

C++ 方面:

TCPConnection::Receive(int timeout, char recv[BUFFER_LENGTH])
{
int iResult = recv(m_socket, recv, BUFFER_LENGTH, 0);
if (iResult <= 0) { ... }
recv[iResult] = '\0';

//FOR DEBUG
std::string s(recv, iResult);
}

【问题讨论】:

  • 在编写通信程序时,您应该始终查看它们之间实际传输的内容,因为如果不这样做,您永远无法确定哪个程序搞砸了。安装 Wireshark 或 tcpdump 并监听通讯。
  • 我看到了,发送端的转储与接收端不同。我很确定这是我缺少的 C++ 方面的一个小转换
  • @JonathonReinhart - 添加了代码,抱歉 - 忘了 :)
  • winsock doesn't support it in the recv() function 是什么意思 - recv() 的缓冲区参数不是声明为 void* 吗?

标签: c# c++ tcp winsock winsock2


【解决方案1】:

好吧,在使用 C# 和 Python 工作了几年之后,我忘记了有符号和无符号 char*。这就是问题所在。感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 2011-11-14
    相关资源
    最近更新 更多