dataconnection.c

来自「linux先ftp客户端,实现文件上传下载,建立目录,实现互联网文件共享」· C语言 代码 · 共 62 行

C
62
字号
#include "MyFtpSvr.h"

int PasvDataConnection_Create(int sockControl)
{
	int sockSvr;
	int sockData;
	char *IpAdd;
	char szSvrMsg[128]="227 Entering Passive Mode (";
	int iLen,iLoop;
	struct sockaddr_in svrAdd={0};

	socklen_t namelen;
	namelen=sizeof(svrAdd);
	sockSvr=TcpSvrInit(0);
	if(getsockname(sockSvr,(struct sockaddr *)&svrAdd,&namelen)<0)
	{
		perror("getsockname");
		return -1;
	}
	IpAdd=inet_ntoa(svrAdd.sin_addr);
	iLen=strlen(IpAdd);
	for(iLoop=0;iLoop<iLen;iLoop++)
	{
		if(IpAdd[iLoop]=='.')
			IpAdd[iLoop]=',';
	}
	strcat(szSvrMsg,IpAdd);
	strcat(szSvrMsg,",");

	PortToStr(szSvrMsg,ntohs(svrAdd.sin_port));
	Send(sockControl,szSvrMsg,strlen(szSvrMsg),0);
	sockData=accept(sockSvr,NULL,NULL);
	close(sockSvr);
	return sockData;
}

void DataConnection_Close(int sockData)
{
	close(sockData);		
}

int PortDataConnection_Create(int iCliPort,char *IpAdd)
{
	struct sockaddr_in addrSvr={0};
	int sockData;

	sockData=socket(AF_INET,SOCK_STREAM,0);
	addrSvr.sin_family=AF_INET;
	addrSvr.sin_port=htons(iCliPort);
	addrSvr.sin_addr.s_addr=inet_addr(IpAdd);
	
	if(connect(sockData,(struct sockaddr *)&addrSvr,
		sizeof(addrSvr))==-1)
	{
		perror("connect faild");
		exit(1);
	}
	return sockData;
}


⌨️ 快捷键说明

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