gpt4 book ai didi

C winsock函数发送所有消息数据

转载 作者:行者123 更新时间:2023-11-30 18:49:29 25 4
gpt4 key购买 nike

我正在使用 WSA 用 c 编写一个服务器,该服务器将处理多个客户端。该协议(protocol)是我自己定义的,我遇到问题的部分是如何确保整个消息确实发送到客户端。

发送我的消息一次,然后我检查实际传输了多少字节。然后,如果没有,我再次发送,并且使用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;
}
}

最佳答案

这是我自己的项目之一的工作代码。注意data + count以偏移到数据中。

int sendall(int sd, char *data, int length) {
int count = 0;
while (count < length) {
int n = send(sd, data + count, length, 0);
if (n == -1) {
return -1;
}
count += n;
length -= n;
}
return 0;
}

关于C winsock函数发送所有消息数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42560937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com