gpt4 book ai didi

c - 使用 TCP 的 Send() 不会发送整个数组

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

我正在尝试将 char 数组发送到服务器,但我无法发送整个数组。我发现我没有收到它只发送前四个数据包的信息。

这是我要一次性发送的数据。

char msg1[]={0xff,0xfd,0x03,0xff,0xfb,0x18,0xff,0xfb,0x1f,0xff,0xfb,0x20,0xff,0xfb,0x21,0xff,0xfb,0x22,0xff,0xfb,0x27,0xff,0xfd,0x05,0xff,0xfb,0x23};

这是我用来检查是否所有字节都已发送的函数。如果不。发送其余部分。

int send_all(int s,char *buf,int *len)
{
int total=0; //total bytes sent
int byteslft= *len; //bytes left to be sent
int n; //value returned by send()

while(total<*len)
{
n=send(s,(buf+total),byteslft,0);
if(n== -1)
break;

total +=n; //total bytes sent will be in total
byteslft -=n; //total bytes left to be sent is stored here
}

*len= total;
return (n==-1)?-1:0;
}

这就是我尝试发送它的方式

len=sizeof (*(arr+i)) ;
if((numbytes=send_all(sockfd,(*(arr+i)),&len))==-1)
{
perror("send");
continue;
}

为了清楚起见,在此之前我已经完成了 connect()、socket() 等步骤。

这就是我如何初始化指向 msg 数组的指针数组。

char *arr[]={msg1,msg2,msg3,msg4....};

当我调试我的程序时,我看到它只发送

ff fd 03 ff //message stops sending here

这就是我没有从服务器获得所需响应的原因。

最佳答案

表达式 *(arr + i) 不是实际的数组,而是指向数组的指针。这意味着 sizeof 操作将返回 指针 的大小(32 位,即 32 位操作系统上的四个字节)而不是它指向的内容.

如果你有实际的数组,你只能使用 sizeof 来获取数组的大小,而不是指针。

关于c - 使用 TCP 的 Send() 不会发送整个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16293740/

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