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

📄 tcp_soc.cpp

📁 filetran 可恶的20字啊啊啊啊啊啊啊啊
💻 CPP
字号:
#include <sys/types.h>#include <sys/socket.h>#include <unistd.h>#include <netinet/in.h>#include <arpa/inet.h>#include <cstring>#include <cstdlib>#include <cerrno>#include <iostream>#include "tcp_soc.h"using namespace std;static const int backlog = 10;Tcp_soc::Tcp_soc(){	_soc_conn = 0;	_soc_lisn = 0;	_port = 0;}int Tcp_soc::init_clin(char* ip_str, char* port_str){	bzero(&_serv_addr, sizeof(_serv_addr));		int ret_val = inet_pton(AF_INET, ip_str, &_serv_addr.sin_addr);	if (ret_val <= 0)	{		perror("inet_pton fail!");		return -1;	}		_port = static_cast<unsigned short>(atoi(port_str));	_serv_addr.sin_port = htons(_port);	_serv_addr.sin_family = AF_INET;		_soc_conn = socket(AF_INET, SOCK_STREAM, 0);	if (_soc_conn == -1)	{		perror("socket fail!");		return -1;	}		soc_type = SOC_CLIN;		return 0;	}int Tcp_soc::init_serv(char* ip_str, char* port_str){	int ret_val = 0;	bzero(&_serv_addr, sizeof(_serv_addr));		if(ip_str != 0)	{		ret_val = inet_pton(AF_INET, ip_str, &_serv_addr.sin_addr);		if (ret_val <= 0)		{			perror("inet_pton fail!");			return -1;		} 	}	else	{		_serv_addr.sin_addr.s_addr = htons(INADDR_ANY);	}		if (port_str != 0)	{		_port = static_cast<unsigned short>(atoi(port_str));	}	else	   _port = 0;	   	_serv_addr.sin_port = htons(_port);	_serv_addr.sin_family = AF_INET;		_soc_lisn = socket(AF_INET, SOCK_STREAM, 0);	if(_soc_lisn == -1)	{		perror("socket fail!");		return -1;	}		socklen_t len = sizeof(struct sockaddr);	ret_val = bind(_soc_lisn, (struct sockaddr*)&_serv_addr, len);	if(ret_val < 0)	{		perror("bind fail!");		return -1;	}		struct sockaddr_in temp_addr;	ret_val = getsockname(_soc_lisn, (struct sockaddr*)&temp_addr, &len);	if(ret_val < 0)	{		perror("getsockname fail!");		return -1;	}		ret_val = listen(_soc_lisn, backlog);	if(ret_val < 0)	{		perror("listen fail!");		return -1;	}		if(ip_str != 0)	  cout<<"the file server is listening at "<<ip_str<<" "<<port_str<<endl;	else	  cout<<"the file server is listening at "<<ntohs(temp_addr.sin_port)<<endl;	  	 soc_type = SOC_SERV;	 	 return 0;	 }int Tcp_soc::tcp_accept(){	struct sockaddr_in clin_addr;	socklen_t len;	int ret_val = 0;	len = sizeof(clin_addr);	bzero(&clin_addr, len);	ret_val = accept(_soc_lisn, (struct sockaddr*)&clin_addr, &len);	if(ret_val < 0)	{		perror("accept fail!");	}		return ret_val;	}Tcp_soc::~Tcp_soc(){	if(_soc_conn > 0)	  close(_soc_conn);	if(_soc_lisn > 0)	  close(_soc_lisn);}void Tcp_soc::close_clin(){	if(_soc_conn > 0)	  close(_soc_conn);}void Tcp_soc::close_lisn(){	if(_soc_lisn >0)	  close(_soc_lisn);}int Tcp_soc::tcp_conn(){	socklen_t len = sizeof(_serv_addr);	int ret_val = connect(_soc_conn, (struct sockaddr*)&_serv_addr, len);	if(ret_val < 0)	{		perror("connect fail!");		return -1;	}		return 0;	}int Tcp_soc::tcp_recv(int socfd, void* recv_buf, int size){	int ret_val = 0;	ret_val = recv(socfd, recv_buf, size, 0);	if(ret_val < 0)	{		perror("recv fail!");	}		return ret_val;	}int Tcp_soc::tcp_send(int socfd, void* send_buf, int size){	int ret_val = 0;	ret_val = send(socfd, send_buf, size, 0);	if(ret_val < 0)	{		perror("send fail!");	}		return ret_val;	}int Tcp_soc::tcp_send(int socfd, string str){	int ret_val = 0;	ret_val = send(socfd, str.c_str(), str.length(), 0);	if(ret_val < 0)	{		perror("send fail!");	}		return ret_val;	}int Tcp_soc::tcp_recv(void* recv_buf, int size){	int ret_val = 0;	ret_val = recv(_soc_conn, recv_buf, size, 0);	if(ret_val < 0)	{		perror("recv fail!");	}		return ret_val;	}int Tcp_soc::tcp_send(void* send_buf, int size){	int ret_val = 0;	ret_val = send(_soc_conn, send_buf, size, 0);	if(ret_val < 0)	{		perror("send fail!");	}		return ret_val;	}int Tcp_soc::tcp_send(string str){	int ret_val = 0;	ret_val = send(_soc_conn, str.c_str(), str.length(), 0);	if(ret_val < 0)	{		perror("send fail!");	}		return ret_val;	}

⌨️ 快捷键说明

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