?? file_tcp_soc.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 + -