使用TCP发送()不发送整个数组

时间:2013-04-30 06:38:54

标签: c sockets network-programming send

我正在尝试向服务器发送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

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

1 个答案:

答案 0 :(得分:2)

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

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