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