我正在编写一个c
使用 WSA 来处理多个客户端的服务器。该协议是我自己定义的,我遇到的问题是如何确保整个消息实际上是发送给客户端的。
我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;
}
}