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

📄 filesock.cpp

📁 linux下将TCPsocket编程的一些函数加以封装
💻 CPP
字号:
#include<fstream>#include<iostream>#include<cstring>#include"filesock.h"using namespace std;const int buffsize = 1024;   //one package sizefilesock::filesock(){}filesock::~filesock(){}//set which file to send or readvoid filesock::setfile(char* filename){	filepath = filename;}//original receive fileint filesock::crecvfile(int sockfd){	int total = 0;	char buffer[buffsize];	int ret_val = 0;	ofstream ofs("zb.txt",ios::out|ios::binary|ios::trunc);	if(!ofs.is_open())	{		cout << "can't open the file!" << endl;		return -1;	}	while(1)	{				if(sock_type == 0)		{			ret_val = crecv(sockfd,buffer,sizeof(buffer)-1);		}		else			ret_val = crecv(buffer,sizeof(buffer)-1);		//cout << buffer << endl;		//cout << ret_val << endl;		buffer[ret_val] = '\0';		if(ret_val == -1)		{			ofs.close();			return -1;		}		else if (ret_val > 0)		{			ofs.write(buffer,static_cast<streamsize>(ret_val));			total = total + ret_val;		}		else if (ret_val == 0)		{			cout << "OK,finished!" << endl;			break;		}	}	ofs.close();	return 0;}int filesock::crecvfile(){	return crecvfile(0);}//tell which file I wantint filesock::cwant(int sockfd,char* buffer){	int ret_val = 0;	int readsize = 0;	int len = strlen(buffer);	int num = 0;		cout << len << endl;		cout << buffer << endl;		readsize = len;				int temp = readsize;		if(readsize > 0)		{			if(readsize < 1024)			buffer[readsize] = '\0';			for(int i = 0; i < temp; i = i+ret_val)			{					if(sock_type == 1)					ret_val = csend(buffer + i);				else					ret_val = csend(sockfd,buffer + i,len);				if(ret_val == -1)				{						return -1;				}					temp = temp - ret_val;			}		}		cout.flush();	return ret_val;}int filesock::cwant(char* buffer){	return cwant(0,buffer);}//read the file I wantint filesock::cread(int sockfd,char* buffer){	int ret_val = 0;	if(sock_type == 0)			ret_val = crecv(sockfd,buffer,1024);	else	ret_val = crecv(buffer,1024);	buffer[ret_val] = '\0';	if(ret_val == -1)	{		return -1;	}	cout << buffer << endl;	return ret_val;}int filesock::cread(char* buffer){	return cread(0,buffer);}//original send fileint filesock::csendfile(int sockfd){	char buffer[buffsize];	int ret_val = 0;	int readsize = 0;	ifstream ifs;	ifs.open(filepath,ios::in|ios::binary);	if(!ifs)	{		cout << "can't open the file!" << endl;		return -1;	}	while(1)	{		//int havesent = 0;		ifs.read(buffer,buffsize);		readsize = ifs.gcount();		int temp = readsize;		cout << readsize << endl;		if(readsize > 0)		{		        if(readsize < 1024)				buffer[readsize] = '\0'; 			  	for(int i = 0; i<temp;i = i + ret_val)			{				if(sock_type == 1)					ret_val = csend(buffer+i);				else					ret_val = csend(sockfd,buffer+i,readsize);				//cout << buffer << endl;				cout << ret_val << endl;				if(ret_val == -1)					return -1;				//havesent = ret_val + havesent;				temp = temp - ret_val;			}		}		else if(readsize == 0)		{			cout << "Finished send file!" << endl;			cout.flush();			break;		}		else			return -1;	}}int filesock::csendfile(){	return csendfile(0);}

⌨️ 快捷键说明

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