我想发送一个字符串“Hello there”,但我只得到“re”。这是为什么?C++ recv()问题
void Accept()
{
SOCKADDR_IN sock;
int intsock = sizeof(sock);
remoteSocket = ::accept(desc, (LPSOCKADDR)&sock, &intsock);
if(remoteSocket == -1)
{
cout << "Error in Accept()" << endl;
}
HandleConnection();
}
void HandleConnection()
{
cout << "You are connected !!!" << endl;
char* temp = new char[20];
Recv(temp);
cout << temp << endl;
}
void Send(const char* buffer)
{
if((::send(remoteSocket, buffer, strlen(buffer), 0)) < 0)
{
cout << "Error in Send()" << endl;
}
}
void Recv(char* buffer)
{
int n = 0;
while((n = ::recv(remoteSocket, buffer, strlen(buffer), 0)) 0)
{
buffer[n] = 0;
}
}
~Server()
{
WSACleanup();
}
};
int main()
{
Server s;
s.Initialize();
s.Socket();
s.Bind();
s.Listen();
while(1)
{
s.Accept();
}
return 0;
}
您发布的代码不能编译。例如,你在类定义之外有一个析构函数(`〜Server`)。 – 2011-01-30 01:14:34
如果忘记* \ escape *字符串结尾的\ 0,strlen会进入无限循环。另外,你有没有尝试过使用select()?使用它你可以等待,直到你收到一些数据。在TCP套接字上,recv()将返回与提供的缓冲区一样多的容量 – 2011-01-30 01:18:28
另一个问题(除了Marlon之外):HandleConnection()使用`new`而不使用`delete`。再说一次,这里没有理由需要“新”。您可以改为使用堆栈变量。 – 2011-01-30 01:19:15