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

📄 server.c

📁 一个在linux环境下的ftp的实现程序!
💻 C
字号:
/************************************* * SOCKET 连接服务端程序             * * 将收到的报文原样返回              * ************************************/#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#include <stdio.h>#include <stdlib.h>#define DATALEN  500int main(int argc, char **argv){	FILE *fp;	int iRecvLen,iRead;        struct protoent *pProtoent;        struct sockaddr_in sin,sAddrIn;        int sid,isSid,sType,iAddrLen;	char cConnectIp[17],cDataBuf[DATALEN+1],cRecvFile[80];	if(argc!=3) {		printf("Usage: %s 端口号 协议类型[1-UDP 0-TCP] \n",argv[0]);		exit(-1);	}	/* 先配置参数 */	memset(&sin,0,sizeof(sin));        sin.sin_family=AF_INET;        sin.sin_addr.s_addr=INADDR_ANY;	if((sin.sin_port=htons((u_short)atoi(argv[1])))==0) {		printf(" 开放端口有误 !\n");		exit(-1);	}	if (atoi(argv[2]))  {		if((pProtoent=getprotobyname("udp"))==0) {			printf(" udp协议有误 !\n");			exit(-1);		}                sType=SOCK_DGRAM;	} else {		if((pProtoent=getprotobyname("tcp"))==0) {			printf(" tcp协议有误 !\n");			exit(-1);		}                sType=SOCK_STREAM;	}	/* 建立 socket  */        sid=socket(PF_INET,sType,pProtoent->p_proto);	if(sid<0) {		printf(" 建立socket失败!\n");		exit(-1);	}			printf(" socket建立成功!\n");        if (bind(sid,(struct sockaddr *)&sin,sizeof(sin))<0) {		printf(" 绑定失败!\n");		exit(-1);	}	printf(" 绑定成功!\n");	if(listen(sid,25) < 0) {		printf(" 建立侦听失败!\n");		exit(-1);	}        printf("Listening on port %s.......\n",argv[1]);	while(1) {		iAddrLen=sizeof(sAddrIn);                if((isSid=accept(sid,(struct sockaddr *)&sAddrIn,&iAddrLen))<0) {			printf("accept error !\n");			sleep(2);			continue;		}                memset(cConnectIp,0,sizeof(cConnectIp));                strcpy(cConnectIp,inet_ntoa(sAddrIn.sin_addr));		printf(" 收到 %s 的连接\n",cConnectIp);		memset(cDataBuf,0x0,sizeof(cDataBuf));		/* 先接收文件长度 */		if(recv(isSid,cDataBuf,8,0) <0) {			printf(" 报文长度接收失败 !\n");			break;		}		iRecvLen = atoi(cDataBuf);		sprintf(cRecvFile,"%s/tmp/test.txt",getenv("HOME"));		if((fp=fopen(cRecvFile,"w"))==NULL) {			printf("  打开接收文件错 !\n");			break;		}		while(iRecvLen > 0) {			iRead = recv(isSid,cDataBuf,1024,0);			if(iRead < 0) {				printf(" 数据报文接收失败 !\n");				break;			}			iRecvLen -=iRead;			fwrite(cDataBuf,iRead,1,fp);		}		fclose(fp);		strcpy(cDataBuf,"文件接收完成");		if(send(isSid,cDataBuf,strlen(cDataBuf),0)<0) {			printf(" 数据报文发送失败 !\n");			break;		}		printf("发送成功,等待接收.....\n");		shutdown(isSid,2); close(isSid);	}	shutdown(isSid,2); close(isSid);	shutdown(sid,2); close(sid);	exit(0);}

⌨️ 快捷键说明

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