From f62fae3be0f4c396538a73887d26673ae3478619 Mon Sep 17 00:00:00 2001 From: sun_yu_xin <1120193223@bit.edu.cn> Date: Fri, 7 Feb 2020 02:54:30 -0800 Subject: [PATCH 1/2] timeout_settings --- client/client.cpp | 5 +++-- lib/Client.cpp | 40 +++++++++++++++++++++++++++++----------- lib/Client.h | 8 +++++--- lib/Socket.cpp | 10 ++++++++++ lib/Socket.h | 4 +++- 5 files changed, 50 insertions(+), 17 deletions(-) diff --git a/client/client.cpp b/client/client.cpp index 210391b..43ece0b 100644 --- a/client/client.cpp +++ b/client/client.cpp @@ -8,10 +8,11 @@ using namespace std; int main(int argc, char const *argv[]) { - Client client(SOCK_STREAM, 8848, (char*)"127.0.0.1"); + Client client(SOCK_STREAM, 8848); while (true) { - client.sendToServer((char*)"hello world"); + client.setIP((char*)"198.168.1.101"); + client.sendToServer((char*)"hello world", 5); sleep(1); } diff --git a/lib/Client.cpp b/lib/Client.cpp index 7d6755c..5dd57de 100644 --- a/lib/Client.cpp +++ b/lib/Client.cpp @@ -3,8 +3,7 @@ #include "Client.h" #define BUFFER_SIZE 1024 - -Client::Client(int mode, int port, char* ip_addr):Socket(mode, port, ip_addr) +Client::Client(int mode, int port):Socket(mode, port) { } @@ -19,14 +18,14 @@ Client::~Client() * @Return: * @Throw: */ -int Client::sendToServer(char *data) +int Client::sendToServer(char *data, int time) { char buf[BUFFER_SIZE]; strcpy(buf, data); skf = createSocket(); struct sockaddr_in ser_addr; initialzeSocketaddr(&ser_addr, this->ip); - createConnection((struct sockaddr *)&ser_addr, sizeof(ser_addr)); + createConnection((struct sockaddr *)&ser_addr, sizeof(ser_addr), time); sendMSG(buf, strlen(buf), 0); close(skf); } @@ -66,24 +65,43 @@ int Client::sendMSG(char *buff, size_t n_bytes, int flag) * @Return: * @Throw: */ -void Client::createConnection(struct sockaddr *serv_addr, size_t addr_len) +void Client::createConnection(struct sockaddr *serv_addr, size_t addr_len, int time) { if (serv_addr == NULL) { printf("地址不存在!\n"); } - int res = connect(skf, serv_addr, addr_len); - if (res == -1) + int ret = 0; + if( time != 0 ) + { + struct timeval timeout; + timeout.tv_sec = time; + timeout.tv_usec = 0; + socklen_t len = sizeof( timeout ); + ret = setsockopt( skf, SOL_SOCKET, SO_SNDTIMEO, &timeout, len ); + assert( ret != -1 ); + ret = connect( skf, serv_addr, addr_len ); + if( ret == -1 ) + { + if( errno == EINPROGRESS ) + { + printf( "connecting timeout!\n" ); + } + } + } + + if( ret == -1) { perror("connect"); - printf("create connection error: %s(errno: %d)\n", strerror(errno), errno); + printf("create connection error: %s(errno: %d)\n", strerror(errno), errno ); } } - - - +void Client::setIP(char* ip_addr) +{ + strcpy(this->ip, ip_addr); +} diff --git a/lib/Client.h b/lib/Client.h index e9a56a3..7152a02 100644 --- a/lib/Client.h +++ b/lib/Client.h @@ -7,12 +7,14 @@ private: private: int sendMSG(char *buff, size_t n_bytes, int flag); - void createConnection(struct sockaddr *serv_addr, size_t addr_len); + void createConnection(struct sockaddr *serv_addr, size_t addr_len, int time); + public: - Client(int mode, int port, char *ip_addr); + Client(int mode, int port); ~Client(); public: - int sendToServer(char *data); + int sendToServer(char *data, int time = 0); + void setIP(char* ip_addr); }; diff --git a/lib/Socket.cpp b/lib/Socket.cpp index 689b897..8c84f54 100644 --- a/lib/Socket.cpp +++ b/lib/Socket.cpp @@ -29,6 +29,16 @@ Socket::Socket(int mode, int port, char* ip_addr) memset(this->data, 0, sizeof(this->data)); this->protocol=0; } +//overload +Socket::Socket(int mode, int port) +{ + this->mode = mode; + this->port = port; + //strcpy(this->ip, ip_addr); + memset(this->data, 0, sizeof(this->data)); + this->protocol=0; +} + Socket::~Socket() { } diff --git a/lib/Socket.h b/lib/Socket.h index 84057b0..b152bcc 100644 --- a/lib/Socket.h +++ b/lib/Socket.h @@ -21,6 +21,8 @@ #include #include #include +#include +#include typedef int socketfd; @@ -35,7 +37,6 @@ protected: int port; char ip[100]; int protocol; - protected: socketfd createSocket(); @@ -47,6 +48,7 @@ private: public: Socket(int sock_stream, int port, char* ip_addr); + Socket(int sock_stream, int port); ~Socket(); }; -- Gitee From 9b4449eb6c595176fa0047879770074943bb50b7 Mon Sep 17 00:00:00 2001 From: sun_yu_xin <1120193223@bit.edu.cn> Date: Fri, 7 Feb 2020 05:17:00 -0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BB=A5=E6=AF=AB=E7=A7=92=E4=B8=BA?= =?UTF-8?q?=E5=8D=95=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/Client.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Client.cpp b/lib/Client.cpp index 5dd57de..29e04c6 100644 --- a/lib/Client.cpp +++ b/lib/Client.cpp @@ -75,8 +75,8 @@ void Client::createConnection(struct sockaddr *serv_addr, size_t addr_len, int t if( time != 0 ) { struct timeval timeout; - timeout.tv_sec = time; - timeout.tv_usec = 0; + timeout.tv_sec = 0; + timeout.tv_usec = time; socklen_t len = sizeof( timeout ); ret = setsockopt( skf, SOL_SOCKET, SO_SNDTIMEO, &timeout, len ); assert( ret != -1 ); -- Gitee