gpt4 book ai didi

c - 使用UDP传输图像

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:53 24 4
gpt4 key购买 nike

我一直在研究如何在 C 语言中使用 UDP 传输图像,我创建了一个代码,该代码有时有效,有时无效。我认为问题在于有时服务器收到的包比写入的要多。我知道我正在尝试创建 TCP,但这是我正在寻找的东西,但不确定如何去做。

我认为要解决这个问题,客户端应该发送 img 的 buff,并且只在服务器回复客户端时才发送第二部分。

代码如下:

客户:

while (!feof(p))
{
fread(*&c, 1, BLEN, p);
sprintf(buf, "%s", *&c);
temp=sendto(s,buf,BLEN, 0, (struct sockaddr *) &si_other, slen);
//sleep(3);
//printf("%d ",temp);
if(temp < 0)
{
fprintf(stderr,"sendto error.\n");
printf("erro");
exit(1);
}
i++;
}

服务器:

while(1){
if(recvfrom(s, buf, BLEN, 0, (struct sockaddr *) &si_other, (unsigned int *) &slen)==-1){
perror("recvfrom error.\n");
exit(1);
}
//printf("%s ", &si_other);
flagr[0] = buf[0];
flagr[1] = buf[1];
flagr[2] = buf[2];
if (strcmp(flagr, flag) == 0 ){
break;
}
fwrite(buf, 1, BLEN, pp);
i++;
}

最佳答案

UDP 是一种数据报协议(protocol),这意味着每次调用 sendto 都会发送一条消息。如果该消息大于 IP 数据包可以容纳的大小,它将被分成多个 IP 数据报。如果这些片段中的任何一个未能到达,整个事情都会在操作系统级别被丢弃。

数据需要以不超过 1450 字节的 block 的形式发送。然后接收方需要读取每个数据包,因为 UDP 不保证数据按顺序到达,您需要以正确的顺序重新组合它们。

这意味着每个数据包都必须有一个用户定义的 header ,其中包含序列号,以便接收方知道将它们放入的顺序。

您还需要担心重传,因为 UDP 不保证实际收到发送的数据包。

我写了一个程序叫UFTP这一切。查看文档和代码,了解您需要执行哪些操作才能通过 UDP 实现可靠的数据传输。

关于c - 使用UDP传输图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32615946/

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