【发布时间】: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