📄 filesock.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 + -