|
楼主 |
发表于 2007-11-22 13:41:35
|
显示全部楼层
根据大家的建议,用循环的思路来做
发送端--》发送4个字节表示文件长度, 然后循环调用send,直到发送字节数为N;
接收端-》接收4个字节,知道长度后,循环调用recv,直到收到字节数为N;(recv后,每次追加方式写入文件)
但是又有新的问题出现了,出现的问题标注在代码中,我把出现问题的那部分代码贴上,请大家分析一下
- ---------------------------client-----------------------
- if(( sendbytes = send(sockfd, size ,4, 0)) == -1){
- perror("send");
- exit(1);
- }
- printf("sent connection1 = :%d\n", sendbytes ); //int bmpsize --> char size[4], 此处发送正确,bmpsize = 814502
-
- for( i = 0; i< bmpsize ;i++){
-
- if(( sendbytes = send(sockfd, &bmpdata[i] ,1, 0)) == -1){
- perror("send");
- exit(1);
- }
- } // 在client 运行的时候,程序会在此停留很久。然后打印:send: Bad address就退出了
- printf("sent connection2 = :%d\n", sendbytes );
- ---------------------------server--------------------------
-
- bmpdata[0]=0xff;
- bmpdata[1]=0xff; //初始化
-
- if(( recvbytes = recv(client_fd, size, 4, 0)) == -1){
- perror("recv");
- exit(1);
- }
-
- bmpsize = ((size[3] & 0x000000ff) *256*256*256 ) + ((size[2] & 0x000000ff) *256*256 ) \
- + ( (size[1] & 0x000000ff) *256 ) + (size[0] & 0x000000ff) *1 ;
-
- printf(" bmpsize is :%d\n", bmpsize); //此处接收正确,也为client端发送的值,bmpsize = 814502
-
-
- i = 0;
-
- while(1){
-
- if(( recvbytes = recv(client_fd, &bmpdata[i], 1, 0)) == -1){
- perror("recv");
- exit(1);
- }
-
- if(i < 16)
- printf("bmpdata[%d] = %d\n",i ,bmpdata[i]); //此处打印的值不为初始化值,全为0,看来在接收,但接收不正确
-
- i++;
-
- if( i == bmpsize) //程序在这个循环中停留很久,直到client端出现错误后,才往下执行。
- break;
-
- }
- // 接收的数据全为0
- printf("receiving bytes' number is :%d\n", i);
- printf("received a connection :%d\n", recvbytes );
复制代码 |
|