【发布时间】:2013-04-24 00:14:42
【问题描述】:
我正在尝试将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
这就是为什么我没有从服务器获得所需的响应。
【问题讨论】:
-
我已经展示了
array是如何初始化的。 -
请出示
arr的声明以及如何初始化它。 -
顺便说一句,由于您有一个名为
byteslft的变量(无意义的缩写,顺便说一句),您应该在while 循环中使用它。注意while(bytesleft > 0)的阅读效果比while(total < *len)好多少?
标签: c sockets network-programming send