我正在尝试向服务器发送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
这就是为什么我没有从服务器获得所需的响应。
答案 0 :(得分:2)
表达式*(arr + i)
不是实际数组,而是数组的指针。这意味着sizeof
操作将返回指针的大小(32位,即32位操作系统上的4个字节),而不是它指向的位置。
如果您拥有实际数组而不是指针,则只能使用sizeof
来获取数组的大小。