⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 host2.c

📁 S3C2410开发板与PC机的通信 客户端和 服务器端的代码 以及makefile文件 服务器为开发板 执行 S3 PC机为客户机 执行host.c
💻 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 + -