我想发一个字符串"Hello there",但我只能得到"re".这是为什么?
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;
}
Run Code Online (Sandbox Code Playgroud)
尽管指出析构函数问题@Billy奥尼尔,你正在做recv()一个循环,但每次你覆盖接收缓冲区.我相信你想要这样的东西:
// Pass buffer and its real size. This function takes care of NULL termination.
size_t Recv(char* buffer, size_t size) {
size_t total = 0, n = 0;
while((n = ::recv(remoteSocket, buffer+total, size-total-1, 0)) > 0) {
total += n;
}
buffer[total] = 0;
return total;
}
int main() {
char buffer[128];
// Connect or whatever (and set your global remoteSocket)
Recv(buffer, sizeof(buffer));
cout << buffer << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)