Я хочу отправить строку «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') вне определения класса. –
strlen идет в бесконечном цикле, если вы забыли * escape * строку с \ 0 на конце. Кроме того, вы пробовали использовать select()? Используя это, вы можете подождать, пока не получите некоторые данные. В сокете TCP recv() будет возвращать столько, сколько может быть предоставленный буфер –
Другая проблема (отличная от Marlon): HandleConnection() использует 'new' без' delete'. Опять же, нет причин, по которым вам нужно «новое» здесь. Вместо этого вы можете использовать переменную стека. –