Estou enviando mensagens sobre TCP / IP, eu preciso prefixo comprimento da mensagem em uma matriz de char e depois enviá-lo. Como eu faço isso?
Além disso, você pode fornecer um exemplo de como extraí-lo na outra extremidade. E, se possível, por favor, explique.
Eu estou usando C ++ e Winsock.
EDITAR:
string writeBuffer = Hello;
unsigned __int32 length = htonl(writeBuffer.length());
Não está retornando o comprimento correto, em vez de um número muito grande.
Para a parte de recepção, se eu usar ntohl (), então eu também obter um grande número em vez do comprimento correto? Por que? Estou recebendo assim
bool Server::Receive(unsigned int socketIndex)
{
// Read data from the socket
if (receivingLength)
{
bytesReceived = recv(socketArray[socketIndex - WSA_WAIT_EVENT_0],
((char*)&messageLength) + bytesReceived, MESSAGE_LENGTH_SIZE - bytesReceived, 0);
if (bytesReceived == SOCKET_ERROR)
{
return false;
}
if (bytesReceived == MESSAGE_LENGTH_SIZE)
{
// If uncomment the following line,
// I won't get the correct length, but a large number
//messageLength = ntohl(messageLength);
receivingLength = false;
bytesReceived = 0;
bytesLeft = messageLength;
}
}
else
{
if (bytesLeft > BUFFER_SIZE)
{
return false;
}
bytesReceived = recv(socketArray[socketIndex - WSA_WAIT_EVENT_0],
&receiveBuffer[bytesReceived], bytesLeft, 0);
if (bytesReceived == SOCKET_ERROR)
{
return false;
}
if (bytesReceived == messageLength)
{
// we have received full message
messageReceived = true;
receiveBuffer[bytesReceived] = '\0';
// wait for next message
receivingLength = true;
}
bytesLeft -= bytesReceived;
}
return true;
}