2013-04-30 55 views
0

我想发送一个char数组到服务器,我不能发送整个事情。我发现我没有收到它只发送前四个数据包。发送()使用TCP不发送整个阵列

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

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(),插座(),等等。在此之前的步骤仅仅是明确的。这是我如何初始化指向msg数组的指针数组。

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

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

ff fd 03 ff //message stops sending here 

这就是为什么我没有收到来自服务器所需的响应。

+0

我已经展示了如何初始化'array'。 – umayneverknow 2013-04-30 06:44:08

+0

请显示'arr'的声明以及如何初始化它。 – 2013-04-30 06:44:21

+0

顺便说一句,既然你有一个名为'byteslft'(无意义的缩写,btw)的变量,你应该在while循环中使用它。注意while(bytesleft> 0)'while'(total <* len)'比'while'好些? – unwind 2013-04-30 07:00:59

回答

2

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

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

+0

我需要获取数组“msg1”的大小才能发送数据。 我没有意识到它会返回指针大小。 有没有什么办法可以从指针获得'sizeof'味精? – umayneverknow 2013-04-30 06:55:13

+0

@ ad3不,没有办法。你可能想保留第二个数组的大小。 – 2013-04-30 06:58:29

+0

这是一个无赖。 非常感谢! – umayneverknow 2013-04-30 07:01:02