📄 host2.c
字号:
#include <fcntl.h> /* File control definitions */#include <errno.h> /* Error number definitions */#include <termios.h> /* POSIX terminal control definitions */#include<sys/stat.h>#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>#include "../gui1/gui.h"#include "../gui1/graphic.c"#include "../gui1/graphic.h"
#define PORT 2000
int pow(int x,int y)
{int a,b=1;
for(a=0;a<y;a++)
{b*=x;}
return b;
}/*转变字符串型IP地址到connect函数可识别的整形IP地址*/
int aiptoi(char * pszip,unsigned int* piip)
{ /*定义指针*/
char psziphere[17],*psztmp1,*psztmp2,*pchar;
int i; /*清空将要进行操作的数组*/
bzero(psziphere,17); /*将要转换的IP地址存入*/
strcpy(psziphere,pszip); /*在该数组末尾添加一个点(.) ,统一形式,利于循环处理,达到简化程序的技巧*/
strcat(psziphere,".");
for(i=0,psztmp1=psziphere,pchar=(char *)piip;i<4;i++)
{
/*查找点(.)*/ if((psztmp2=strstr(psztmp1,"."))==NULL)
return 0;
/*转变点(.)成结束符(\0),分成四个独立字符串进行分别处理*/ psztmp2[0]=0; /*转化,累加*/
*(pchar+i)=atoi(psztmp1);
psztmp1=psztmp2+1;
}
return 1;
}
/*主函数*/
int trans(char *argv,char *bmpbuf,char *filename)
{
int sockfd,yy;
unsigned int uiip;
char a,b,c,szrecvbuf[128],buf1[10],pool[2],str0[3];
char head[8];
int *phead=head+4,nsize=128,allsize=0,i,xx;
int filelength,length,buf2[10],buf3[10];
struct sockaddr_in servaddr;
sockfd = socket(AF_INET,SOCK_STREAM,0);
servaddr.sin_family=AF_INET; /*填入端口号*/
servaddr.sin_port=htons(PORT);
/*清零*/
bzero(&(servaddr.sin_zero),8);
/*如果IP格式转换不成功,显示错误*/
if(!aiptoi(argv,&uiip))
{
printf("the ip is not correct or lose the ip input!\n");
return 0;
}
/*指定连接的客户端IP*/ servaddr.sin_addr.s_addr=uiip; /*连接客户端*/
if(connect(sockfd,(struct sockaddr *)&servaddr,sizeof(struct sockaddr)))
{
printf("Can't connect to the server!\n");
return 0;
}
/*输出文件名*/
write(sockfd,filename,10);
/*取得文件的长度*/ read(sockfd,pool,1);
length=(int)(pool[0]-48); /*读入指定长度到缓冲区*/
read(sockfd,buf1,length);
for(i=0;i<length;i++)buf2[i]=(int)(buf1[i])-48;
for(i=0;i<length;i++)buf3[i]=buf2[i]*pow(10,length-1-i);
filelength=0;
for(i=0;i<length;i++)filelength+=buf3[i];
while(allsize<filelength)
{ /*缓冲区清零*/ bzero(szrecvbuf,128);
read(sockfd,head,8);
nsize=read(sockfd,szrecvbuf,128);
/*计算比率*/ for(i=0;i<nsize;i++)bmpbuf[allsize+i]=szrecvbuf[i];
allsize+=nsize;
//yy=100*allsize/filelength;
/*尚未传送完毕,显示传送比率*/ //if(yy<100)
//{a=(char)(yy/10+48);
// b=(char)((yy-(yy/10)*10)+48);
// str0[0]=a;str0[1]=b;str0[2]='\0';
// textout(190,100,str0,0xeeee,0x3333);
//}
/*传送完毕*/ //if(yy==100)textout(190,100,"100",0xeeee,0x3333);
//xx=150*yy/100; /*绘制矩形*/
//fillrectangle(40,40,40+xx,90);
if(nsize<=0)break;printf("allsize :%d\n",allsize);
}
bmpbuf[filelength]='\0';printf("trans ok\n");
return 0;
}
int main()
{char bmpbuf[300000]; /*默认的服务器IP地址,可以和具体的实验环境相结合*/ char ip[]="192.168.2.120"; /*调用tran函数*/
trans(ip,bmpbuf,"look.bmp");//ShowBuf(bmpbuf,0,0);//printf("times :%d\n",bmpbuf);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -