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

📄 client.c

📁 一个在linux环境下的ftp的实现程序!
💻 C
字号:
/************************************* * SOCKET 连接:客户端程序             * * 短连接方式                        * ************************************/#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <fcntl.h>#include <netinet/in.h>#include <arpa/inet.h>#include <netdb.h>#include <string.h>#include <stdlib.h>#define DATALEN  500int main(int argc, char *argv[]){	struct sockaddr_in sin;	struct protoent *pProtoent;	FILE *fp;	char cDataBuf[DATALEN+1],cFile[50];	int sid,iType,iReadLen,iSendLen,iFirst,iFileSize;	if(argc!=4) {		printf("Usage: %s IP地址 端口号 协议类型[1-UDP 0-TCP]\n",argv[0]);		exit(-1);	}	/* 参数配置 */	memset(&sin,0,sizeof(sin));	sin.sin_family=AF_INET;	if((sin.sin_addr.s_addr=inet_addr(argv[1]))==INADDR_NONE) {		printf(" IP格式转换错误 \n");		exit(-1);	}	if((sin.sin_port=htons((u_short)atoi(argv[2])))==0) {		printf(" 端口格式转换错误 \n");		exit(-1);	}	if (atoi(argv[3]))  {		if ((pProtoent=getprotobyname("udp"))==0) {			printf(" udp协议处理错误 \n");			exit(-1);		}		iType=SOCK_DGRAM;	} else {		if ((pProtoent=getprotobyname("tcp"))==0) {			printf(" tcp协议处理错误 \n");			exit(-1);		}		iType=SOCK_STREAM;	}	if((sid=socket(AF_INET,iType,pProtoent->p_proto)) < 0) {		printf(" socket 建立错误,请确定服务端进程已启动!\n");		exit(-1);	}	printf(" socket 建立成功! \n" );	/* 下面开始处理和服务端的消息传递 */	if(connect(sid,(struct sockaddr *)&sin,sizeof(sin))<0) {		printf(" 连接失败 !\n");		exit(-1);	}	/* 发送数据报文 */	sprintf(cFile,"%s/dbase/test.txt",getenv("HOME"));	if(( fp=fopen(cFile,"r"))==NULL ) {		printf(" 打开文件:%s 失败\n",cFile);		exit(-1);	}		fseek(fp,0,SEEK_END);	iFileSize = ftell(fp);	fseek(fp,0,SEEK_SET);	iFirst = iReadLen =0;	while(iFileSize>0) {		memset(cDataBuf,0x0,sizeof(cDataBuf));		if(iFirst==0) {  /* 第一个包说明文件长度*/			sprintf(cDataBuf,"%08ld",iFileSize);			iSendLen = 8;			iFirst = 1;		} else {			iReadLen=fread(cDataBuf,1,1024,fp);			iSendLen = iReadLen;		}		if(send(sid,cDataBuf,iSendLen,0)<0) {			printf(" 数据报文发送失败 !\n");			break;		}		iFileSize -=iSendLen;	}	fclose(fp);	printf("发送成功,等待接收.....\n");	/* 接收报文 */	memset(cDataBuf,0x0,sizeof(cDataBuf));	if(recv(sid,cDataBuf,DATALEN,0) <0) {		printf(" 数据报文接收失败 !\n");		exit(-1);	}	printf("收到的报文: %s\n",cDataBuf);	shutdown(sid,0);	close(sid);	exit(0);}

⌨️ 快捷键说明

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