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

📄 client.c

📁 一个简单的linux下的网络传输程序
💻 C
字号:
/********************************************************************   Copyright 2004 by YAAN all rights reserved.   Filename:    client.c   Author:      Edgar Liu   Date:        2004.8.12   Description:    Others:   Main Function Lists:	1.	2.   History:********************************************************************/#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/stat.h>#include <netinet/in.h>#include <arpa/inet.h>#include <errno.h>#include "public.h"char g_szPath[MAX_PATH_LENTH];char szServerAddr[16];short int nPort = DEFAULT_PORT;/********************************************************************   Function:   Description:   Arguments:   Return:   Others:********************************************************************/void Usage(int argc,char** argv,int nCode){	switch (nCode)	{	case 1:		break;	case 2:		fprintf(stderr,"IP Address Error!\n");		break;	case 3:		fprintf(stderr,"Please input IP Address!\n");		break;	case 4:		fprintf(stderr,"Port  Error!\n");		break;	}	fprintf(stderr,"Usage: %s -s ServerAddress [-d Directory][-p Port]\n",argv[0]);	exit(1);}/********************************************************************   Function:   Description:   Arguments:   Return:   Others:********************************************************************/void parseCmdLine(int argc,char** argv){	int i,nErrCode = 0,on = 0;	if(argc == 1)	{		nErrCode = 1;		Usage(argc,argv,nErrCode);	}	for(i=0; i<argc;i++)	{		if(argv[i][0] == '-')		{			switch (argv[i][1])			{			case 's':				if((argv[i+1] == NULL) || (IsIPAddr(argv[i+1])))				{					nErrCode = 2;					Usage(argc,argv,nErrCode);				}				strcpy(szServerAddr,argv[i+1]);				on = 1;				break;			case 'd':				if(argv[i+1])				{					memset(g_szPath,0,MAX_PATH_LENTH);					strcpy(g_szPath,argv[i+1]);					int nLen = strlen(g_szPath);					if(g_szPath[nLen-1] != '/')						g_szPath[nLen] = '/';				}				break;			case 'p':				if(argv[i+1] == NULL || (IsNumber(argv[i+1])) )				{					nErrCode = 4;					Usage(argc,argv,nErrCode);				}				nPort = atoi(argv[i+1]);				break;			default:				break;				}		}	}	if(!on)	{		nErrCode = 3;		Usage(argc,argv,nErrCode);	}}/********************************************************************   Function:   Description:   Arguments:   Return:   Others:********************************************************************/int initSocket(){	int sockfd;		sockfd = socket(AF_INET,SOCK_DGRAM,0);	if(sockfd < 0)	{		fprintf(stderr,"Socket Error:%s\n",strerror(errno));		exit(1);	}	return sockfd;}/********************************************************************   Function:   Description:   Arguments:   Return:   Others:********************************************************************/void SendClientInfo(int sockfd,struct sockaddr_in* pAddr){	char szBuf[64];	int len,nBufLen;	CLIENT_INFO clientInfo;       /*   从键盘读入,写到服务端   */ 	memset(&clientInfo,0,sizeof(CLIENT_INFO));	printf("Please Input User Name: ");	memset(szBuf,0,64);	fgets(szBuf,64,stdin);	nBufLen = strlen(szBuf);	szBuf[nBufLen-1] = 0;	strcpy(clientInfo.szClient,szBuf);	printf("Please Input Password: ");	memset(szBuf,0,64);	fgets(szBuf,64,stdin);	nBufLen = strlen(szBuf);	szBuf[nBufLen-1] = 0;	strcpy(clientInfo.szPasswd,szBuf);	printf("Please Input Command: ");	memset(szBuf,0,64);	fgets(szBuf,32,stdin);	nBufLen = strlen(szBuf);	szBuf[nBufLen-1] = 0;	strcpy(clientInfo.szCommand,szBuf);	printf("user:%s passwd:%s Cmd:%s\n",		clientInfo.szClient,		clientInfo.szPasswd,		clientInfo.szCommand);	len = sizeof(struct sockaddr_in);	strcpy(clientInfo.szLogo,"YAAN");	clientInfo.uSequence = 1;        sendto(sockfd,(char*)&clientInfo,sizeof(CLIENT_INFO),0,(struct sockaddr*)pAddr,len); }/********************************************************************   Function:   Description:   Arguments:   Return:   Others:********************************************************************/int saveData(struct ServerData* pSD,int nSize){	FILE* fp;	char szMkdir[MAX_PATH_LENTH],szBuf[MAX_PATH_LENTH];	char* pPos,*pPos1;	mode_t mode = 0644;	static unsigned long int g_uSequence = 0;	//	if(pSD->uSequence < g_uSequence)//	{//		return 1;//	}	g_uSequence = pSD->Header.uSequence;	memset(szMkdir,0,MAX_PATH_LENTH);	strcpy(szMkdir,g_szPath);		pPos = pSD->Header.szFileName;	while((pPos1 = strchr(pPos,'/')) != NULL)	{		memset(szBuf,0,MAX_PATH_LENTH);		strncpy(szBuf,pPos,pPos1-pPos+1);		strcat(szMkdir,szBuf);		pPos = pPos1+1;		mkdir(szMkdir,mode);	}		strcat(szMkdir,pPos);	printf("%ld\tFileCount:%d\t FileName %s FileSize:%d\n",			pSD->Header.uSequence,			pSD->Header.uFileCount,			szMkdir,			pSD->Header.uFileSize);	fp = fopen(szMkdir,"a");	if(fp == NULL)	{		fprintf(stderr,"open %s error:%s\n",pSD->Header.szFileName,strerror(errno));		fclose(fp);		return 1;	}	fwrite(pSD->szData,1,pSD->Header.uFileSize,fp);	fclose(fp);	return 0;}/********************************************************************   Function:   Description:   Arguments:   Return:   Others:********************************************************************/void DownloadData(int sockfd,struct sockaddr_in* pAddr,char* pDir){        struct ServerData sd;	int nSize;		fprintf(stderr,"Download Data to Directory:%s\n",pDir);	SendClientInfo(sockfd,pAddr); 	fprintf(stderr,"Begin to Download Data......\n");         	while(1)	{                /*   从网络上读, */		memset(&sd,0,sizeof(struct ServerData));                nSize = recvfrom(sockfd,(char*)&sd,sizeof(struct ServerData),0,NULL,NULL);		saveData(&sd,nSize);                     } }/********************************************************************   Function:   Description:   Arguments:   Return:   Others:********************************************************************/int main(int argc,char**argv){	//	int sockfd;	struct sockaddr_in servAddr;	//init block;	memset(g_szPath,0,MAX_PATH_LENTH);	strcpy(g_szPath,"./");	//parse Command Line;	parseCmdLine(argc,argv);	//main block;	sockfd = initSocket();	bzero(&servAddr,sizeof(servAddr));	servAddr.sin_family = AF_INET;	servAddr.sin_port   = htons(nPort);	inet_aton(szServerAddr,&servAddr.sin_addr);		DownloadData(sockfd,&servAddr,g_szPath);	close(sockfd);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -