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

📄 ftpnet.c

📁 linux下的FTP服务器。支持现在主流的FTP客户端软件。增加了一些额外的功能。
💻 C
字号:

#include "Public.h"
#include "Ftpnet.h"

int Tcp_service(char * ip,int port) // 创建服务器监听套接字,并绑定ip && port
{
	int listenfd;
	
	listenfd = socket(AF_INET,SOCK_STREAM,0);
	if (listenfd == -1)
	{
		// 创建失败
		return -1;
	}
	// 创建成功	
	
	struct sockaddr_in servaddr;
	socklen_t len;
	
	memset(&servaddr,0,sizeof(servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_port = htons(port);
	//servaddr.sin_addr.s_addr = htonl("192.168.0.188");
	//servaddr.sin_addr.s_addr = inet_addr("192.168.0.188");
	servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
		//servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
	len = sizeof(servaddr);
	// 套接字属性设置
	int opt=1;
	setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,(const char *)&opt,sizeof(opt));

	Tcp_bind(listenfd,(struct sockaddr *)&servaddr,len);
	return listenfd;
}

// 服务器套接口 绑定套接口地址
int Tcp_bind(int sockfd,struct sockaddr * my_addr,socklen_t addrlen)// 绑定
{
	if (bind(sockfd,my_addr,addrlen) != 0 )
	{
		perror("Because:call bind function flase . Startup service is failed\n");
		exit(EXIT_FAILURE);
	}
	return 0;
}

// 监听函数
int Tcp_listen(int sockfd,int backflog) // 监听函数
{
	if (listen(sockfd,backflog) !=0 )
	{
		perror("Because:call listen function flase. Starup service is failed\n");
		exit(EXIT_FAILURE);
	}
	return 0;
}

// 接受函数
int Tcp_accept(int sockfd,struct sockaddr * addr,socklen_t * addrlen) // 接收函数
{
	int clientfd;
	clientfd = accept(sockfd,addr,addrlen);
	if (clientfd == -1 )
	{
		perror("Because: call accept function flase . Starup service is failed\n");
		exit(EXIT_FAILURE);
	}
	return clientfd;
}

// 关闭套接字
int Tcp_close(int sockfd)// 关闭套接口
{
	close(sockfd);
}


// 获得本地IP 地址
int getlocalip(char *ip)
{
	int sockfd;
	if(-1 == (sockfd = socket(PF_INET, SOCK_STREAM, 0)))
	{
		perror( "socket" );
		return -1;
	}
	struct ifreq req;
	struct sockaddr_in *host;
	bzero(&req, sizeof(struct ifreq));
	strcpy(req.ifr_name, "eth0"); 
	ioctl(sockfd, SIOCGIFADDR, &req);
	host = (struct sockaddr_in*)&req.ifr_addr;
	strcpy(ip, inet_ntoa(host->sin_addr));
	close(sockfd);
	return 1;
}

⌨️ 快捷键说明

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