0

我正在尝试将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

这就是为什么我没有从服务器获得所需的响应。

4

1 回答 1

2

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

sizeof如果您有实际数组,则只能用于获取数组的大小,而不是指针。

于 2013-04-30T06:41:53.847 回答