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

📄 file_tcp_soc.cpp

📁 filetran 可恶的20字啊啊啊啊啊啊啊啊
💻 CPP
字号:
#include <fstream>#include <iostream>#include "file_tcp_soc.h"using namespace std;const static int bufsize = 1024;static int loadsize = 0;void File_soc::set_file_info(char* req_file_name, char* file_name){	_req_file_name = req_file_name;	_file_name = file_name;}int File_soc::send_comd(){	send_comd(0);}int File_soc::send_comd(int socfd){	string comd = _req_file_name;	comd += "\n\r";	int len = comd.length();	int num_bytes = 0;	int ret_val = 0;		while(num_bytes < len)	{		if (soc_type == SOC_CLIN)		  ret_val = tcp_send(comd.substr(num_bytes, len-num_bytes));		else		  ret_val = tcp_send(socfd, comd.substr(num_bytes, len-num_bytes));				if(ret_val < 0) 		{			return -1;		}  		  		num_bytes += ret_val;			}		return 0;	}int File_soc::read_comd(){	read_comd(0);}int File_soc::read_comd(int socfd){	char temp[bufsize];	char cmd_buf[bufsize];	memset(temp, '\0', bufsize);	memset(cmd_buf, '\0', bufsize);		int ret_val = 0;	int num_bytes = 0;	char* p = 0;	int canread = 1; 		while(canread)	{		if (soc_type == SOC_CLIN)		  ret_val = tcp_recv(temp, bufsize);		else		  ret_val = tcp_recv(socfd, temp, bufsize);		  		if(ret_val <= 0)		   return -1;		   		 temp[ret_val] = '\0';		 num_bytes += ret_val;		 		 if((p = strstr(temp, "\n\r")) == 0)		 {		 	if(num_bytes <= bufsize)		 	{		 		strcat(cmd_buf, temp);		 	}		 }		 else		 {		 	strncat(cmd_buf, temp, p-temp);		 	canread = 0;		 }	}	_req_file_name = cmd_buf;		cout<<"client requests file: "<<_req_file_name<<endl;		return 0;	}int File_soc::save_file(){	save_file(0);}int File_soc::save_file(int socfd){	char buf[bufsize];	int ret_val = 0;		ofstream out(_file_name.c_str(), ios::out|ios::trunc|ios::binary);	cout<<endl;	if(!out.is_open())	{		cout<<"can not create the file: "<<_file_name<<endl;		return -1;	}		for(;;)	{		if (soc_type == SOC_CLIN)		  ret_val = tcp_recv(buf, bufsize);		else		  ret_val = tcp_recv(socfd, buf, bufsize);		  		if(ret_val < 0)		{			out.close();			return -1;		}		else if (ret_val > 0)		{			out.write(buf, static_cast<streamsize>(ret_val));			loadsize += ret_val;		}		else if (ret_val == 0)		{			cout<<"Download successfully!"<<endl;			break;		}	}	cout<<endl;		out.close();	return 0;	}int File_soc::read_file(){	read_file(0);}int File_soc::read_file(int socfd){	char buf[bufsize];	int ret_val = 0;	int sendsize = 0;		ifstream in;		in.open(_req_file_name.c_str(), ios::binary|ios::in);		if(!in)	{		cout<<"can not open the file: "<<_req_file_name<<endl;		return -1;	}		for (;;)	{		int num_bytes = 0;		in.read(buf, static_cast<streamsize>(bufsize));				sendsize = in.gcount();				if(sendsize < 0)		{			return -1;		}		else if (sendsize == 0)		{			cout<<"Finished reading file!"<<endl;			cout.flush();			break;		}		else		{			int len = sendsize;						while(num_bytes < sendsize)			{				if(soc_type == SOC_CLIN)				  ret_val = tcp_send(buf+num_bytes, len);				else				  ret_val = tcp_send(socfd, buf+num_bytes, len);				if(ret_val < 0)				  return -1;								num_bytes += ret_val;				len -= ret_val;			}		}			}	in.close();		return 0;	}

⌨️ 快捷键说明

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