?? tcpfactory.cpp
字號:
#include <netdb.h>
#include <arpa/inet.h>
#include "tcpfactory.h"
using namespace std;
TcpFactory::TcpFactory() {
listenSock = -1;
}
TcpFactory::~TcpFactory() {
if(listenSock!=-1)
if(close(listenSock)) throw "Close socket failed";
}
void TcpFactory::setDest(int addr, int port) {
destAddr = htonl(addr);
destPort = htons(port);
}
void TcpFactory::setDest(const string& addr, int port) {
hostent* hp = gethostbyname(addr.c_str());
if(!hp) throw "Resolve address failed";
destAddr = *(uint32_t*)hp->h_addr_list[0];
destPort = htons(port);
}
Tcp* TcpFactory::connect() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd==-1) throw "Create socket failed";
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = destAddr;
addr.sin_port = destPort;
if(::connect(sockfd, (sockaddr*)&addr, sizeof addr))
throw "Establish connection failed";
cout << "\t[M] Connected to " << inet_ntoa(addr.sin_addr) << ":" << ntohs(destPort) << endl;
return new Tcp(sockfd);
}
void TcpFactory::setLocalPort(int port) {
int newPort = htons(port);
if(localPort!=newPort) {
localPort = newPort;
if(listenSock!=-1) {
if(close(listenSock)) throw "Close socket failed";
listenSock = -1;
}
}
}
Tcp* TcpFactory::listen() {
cout << "\t[M] Listening on local port " << ntohs(localPort) << endl;
if(listenSock==-1) {
listenSock = socket(AF_INET, SOCK_STREAM, 0);
if(listenSock==-1) throw "Create socket failed";
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_port = localPort;
if(bind(listenSock, (sockaddr*)&addr, sizeof addr))
throw "Bind listen port failed";
if(::listen(listenSock, MAX_CONNECTION))
throw "Listen connection failed";
}
sockaddr_in addr;
socklen_t len = sizeof addr;
int sockfd = accept(listenSock, (sockaddr*)&addr, &len);
if(sockfd==-1) throw "Accept connection failed";
cout << "\t[M] Accept connection from " << inet_ntoa(addr.sin_addr) << ":" << ntohs(addr.sin_port) << endl;
return new Tcp(sockfd);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -