From 820c35480a967ea7595d1d15cc619ff515f04145 Mon Sep 17 00:00:00 2001 From: pei-jikui Date: Thu, 20 May 2021 05:59:06 +0000 Subject: [PATCH 1/2] fix a compile error --- tproxy_example | Bin 0 -> 22584 bytes tproxy_example_conn.c | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100755 tproxy_example diff --git a/tproxy_example b/tproxy_example new file mode 100755 index 0000000000000000000000000000000000000000..9399181eca0e198e4dc6b029f89d285471299031 GIT binary patch literal 22584 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 literal 0 HcmV?d00001 diff --git a/tproxy_example_conn.c b/tproxy_example_conn.c index c58c81e..1e9e168 100644 --- a/tproxy_example_conn.c +++ b/tproxy_example_conn.c @@ -10,7 +10,8 @@ #include #include #include - +#include +#include #include "tproxy_example_conn.h" //Createas a socket and initiates the connection to the host specified by From 228404ead4ad005e0a27483ab4f75a2c7562f994 Mon Sep 17 00:00:00 2001 From: pei-jikui Date: Thu, 20 May 2021 07:22:22 +0000 Subject: [PATCH 2/2] add the client and server programs --- client.cpp | 81 ++++++++++++++++++++++++++++ server.cpp | 136 +++++++++++++++++++++++++++++++++++++++++++++++ tproxy_example | Bin 22584 -> 0 bytes tproxy_example.c | 1 + 4 files changed, 218 insertions(+) create mode 100644 client.cpp create mode 100644 server.cpp delete mode 100755 tproxy_example diff --git a/client.cpp b/client.cpp new file mode 100644 index 0000000..a39cc30 --- /dev/null +++ b/client.cpp @@ -0,0 +1,81 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define SERVER_PORT 9876 +#define MESSAGE_LEN 1024 + +using namespace std; + +int main(int argc, char* argv[]){ + + int socket_fd; + int on = 1; + int ret = -1; + struct sockaddr_in serveraddr; + char send_buf[MESSAGE_LEN] = "Hello ! This is Client"; + char recv_buf[MESSAGE_LEN]; + + /* 1. 创建文件描述符 */ + socket_fd = socket(AF_INET, SOCK_STREAM, 0); + if(socket_fd == -1){ + std::cout << "Failed to create socket !" << std::endl; + exit(-1); + } + // 设置 socket 选项 + ret = setsockopt(socket_fd, + SOL_SOCKET, + SO_REUSEADDR, + (void *)&on, + sizeof(on)); + if(ret == -1){ + std::cout << "Failed to set socket !" << std::endl; + exit(-1); + } + /* 2. 连接服务器 */ + // 配置服务端信息 + serveraddr.sin_family = AF_INET; + serveraddr.sin_port = htons(SERVER_PORT); + serveraddr.sin_addr.s_addr = inet_addr("10.250.16.149"); + bzero(&(serveraddr.sin_zero), 8); // 将预留位赋值为0 + // 连接 + ret = connect(socket_fd, + (struct sockaddr *)&serveraddr, + sizeof(struct sockaddr)); + if(ret == -1){ + std::cout << "Failed to connect !" << std::endl; + exit(-1); + } + + /* 3. 发送数据 */ + while(1){ + // 从控制台输入要发送的数据 + memset((void *)send_buf , 0, MESSAGE_LEN); + cin.getline(send_buf, 90); + // 发送数据 + ret = send(socket_fd, (void *)send_buf, strlen(send_buf), 0); + if(ret <= 0){ + std::cout << "Failed to send data !" << std::endl; + break; + } + std::cout << "Client Send --------> \n" << send_buf << std::endl; + + /* 4. 接收数据 */ + ret = recv(socket_fd, (void *)recv_buf, MESSAGE_LEN, 0); + if(ret <= 0){ + break; + } + // 要把接收到的数据的数组中此条长度的后面切掉,否则会出现拼接上一次数据的现象 + recv_buf[ret] = '\0'; + std::cout << "Recv From Server------------> \n" << recv_buf << std::endl; + bzero((void *)recv_buf, MESSAGE_LEN); + } + close(socket_fd); + return 0; +} + diff --git a/server.cpp b/server.cpp new file mode 100644 index 0000000..2f6fde9 --- /dev/null +++ b/server.cpp @@ -0,0 +1,136 @@ +/* + 使用 epoll 的服务端程序 +*/ +#include +#include +#include +#include +#include +#include +#include + +#define SERVER_PROT 9876 +#define MESSAGE_LEN 1024 +#define MAX_EVENTS 20 +#define TIMEOUT 500 + +int main(int argc, char* argv[]){ + int socket_fd, accept_fd; + int on = 1; + int ret = -1; + struct sockaddr_in localaddr, remoteaddr; + socklen_t addrlen; + char recv_buf[1024]; + int epoll_fd; + struct epoll_event ev, events[MAX_EVENTS]; + int event_number; + int flags; + + // 1. 创建套接字文件描述符,并设置 socket 选项 + socket_fd = socket(AF_INET, SOCK_STREAM, 0); + if(socket_fd == -1){ + std::cout << "Failed to create socket !" << std::endl; + exit(-1); + } + ret = setsockopt(socket_fd, + SOL_SOCKET, + SO_REUSEADDR, + &on, + sizeof(on)); + if(ret == -1){ + std::cout << "Failed to set socket !" << std::endl; + } + + /* 要把文件描述符设置为非阻塞的 */ + flags = fcntl(accept_fd, F_GETFL, 0); + fcntl(accept_fd, F_SETFL, flags | O_NONBLOCK); + + // 2. 绑定端口和地址 + localaddr.sin_family = AF_INET; + localaddr.sin_port = htons(SERVER_PROT); + localaddr.sin_addr.s_addr = INADDR_ANY; + bzero(&(localaddr.sin_zero), 8); // 填充 0 到数组中 + + ret = bind(socket_fd, + (struct sockaddr *)&localaddr, + sizeof(struct sockaddr_in)); + if(ret == -1){ + std::cout << "Failed to bind the socket !" << std::endl; + exit(-1); + } + + // 3. 开始监听 + ret = listen(socket_fd, 10); //由于 listen 一次只能接受一个,所以需要一个队列来存放并发的请求,长度为10够了 + if(ret == -1){ + std::cout << "Failed to listen... !" << std::endl; + exit(-1); + } + std::cout << "will to listen port: " << SERVER_PROT << std::endl; + /* epoll_1:创建一个 epoll 文件描述符 */ + epoll_fd = epoll_create(256); + ev.events = EPOLLIN; + ev.data.fd = socket_fd; + /* epoll_2:将监听文件描述符添加到 epoll_fd 中 */ + epoll_ctl(epoll_fd, EPOLL_CTL_ADD, socket_fd, &ev); + + addrlen = sizeof(struct sockaddr_in); + for(;;){ + /* epoll_3:等待事件,相当于 select 函数 */ + event_number = epoll_wait(epoll_fd, events, MAX_EVENTS, TIMEOUT); + + for(int i=0; i 0){ + /* 打印数据 */ + recv_buf[ret] = '\0'; + std::cout << "Server Recv:-----> " << recv_buf << std::endl; + /* 数据回显 */ + ret = send(events[i].data.fd, + (void *)recv_buf, + MESSAGE_LEN, + 0); + } + } + } + } + close(socket_fd); + return 0; +} + diff --git a/tproxy_example b/tproxy_example deleted file mode 100755 index 9399181eca0e198e4dc6b029f89d285471299031..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22584 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 diff --git a/tproxy_example.c b/tproxy_example.c index 508d60c..895c1b5 100644 --- a/tproxy_example.c +++ b/tproxy_example.c @@ -38,6 +38,7 @@ int handle_epollin(tproxy_conn_t *conn){ //I need to make a system call to determin which socket if(ioctl(conn->local_fd, FIONREAD, &numbytes) != -1 && numbytes > 0){ + fprintf(stderr, "received data.\n"); fd_in = conn->local_fd; fd_out = conn->remote_fd; } else {