我正在使用将处理多个客户端的WSA编写服务器c
。协议是我自己定义的东西,我遇到的问题是如何确保整个消息实际上被发送到客户端。C winsock函数发送所有消息数据
我send
我的消息一次,而且我检查实际传输的字节数。那么,如果没有,我再次send
,并且随着我现在发送的数据的长度,我使用unsentBytes
(参见代码)。 我的问题是,当我尝试发送未发送的额外字节时,我正在重新发送整个消息。我如何只发送留言的剩余部分?
我知道我一次只能发送1个字符,并且在消息结束时停止接收客户端,但我认为我也可以像这样做,并且它更好。
这是正确的使用逻辑吗?
int send_msg(SOCKET s, char *msg, int msg_len)
{
int unsentBytes = msg_len;
int bytesResult = send(s, msg, msg_len, SEND_FLAGS);
unsentBytes -= bytesResult;
while (unsentBytes != 0)
{
bytesResult = send(s, msg, unsentBytes, SEND_FLAGS); // ### msg is the problem
unsentBytes -= bytesResult;
}
}
如果你不需要保留'msg'的值(在发布的代码中就是这样),你可以在每次发送之后说'msg + = bytesResult;'。 –