【发布时间】:2016-09-15 17:05:50
【问题描述】:
我无法解释 recv() 函数的问题:它总是返回 0。我有一个客户端/服务器应用程序,其中服务器只需通过互联网从客户端接收字符串(不同的电脑)。
没有连接问题,我还尝试从服务器向客户端发送一个字符串:它有效。
我在博客中搜索,我发现了什么,recv() socket function returning data with length as 0、non-blocking recv returns 0 when disconnected、Recv returning zero incorrectly,并没有帮助我理解。
我在这里发布 Network 类: 网络.h
class Network
{
WSADATA wsaData;
WORD wVersionRequested;
int Port;
unsigned int byteReceived, byteSent;
SOCKET listeningSocket, connectedSocket;
SOCKADDR_IN serverAddr, senderInfo, clientAddr;
int caddrlen;
char buff[DIM];
string buffer;
public:
Network();
~Network();
void Recv();
};
Network.c
void Network::Recv() {
int n = recv(connectedSocket, buff, strlen(buff), 0);
setByteReceived(n);
buffer.assign(buff, n);
cout << "Buffer is: " << buff << endl;
if (byteReceived == 0)
cout << "\tConnection closed" << endl;
else if (byteReceived > 0) {
cout << "\tByte received: " << byteReceived << endl;
cout << getBuffer() << endl;
}
else {
myFormatMessage(WSAGetLastError());
}
}
最终的行为如下:客户端和服务器连接,服务器从recv()返回0。我还尝试在同一台机器上运行这两个程序。感谢您的帮助。
【问题讨论】:
-
你知道
recv()到底是怎么收到0的? -
我没有说 :) 我只知道 recv() 返回 0。我也尝试使用 wireshark 来跟踪网络流量,但我遇到了一些问题。这种行为似乎与 Linux 不同,即使以管理员身份运行程序,我也看不到环回接口。我不知道错误可能出在哪里。
标签: c++ network-programming winsock2 recv