我想發送一個字符串「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