基于ACE_SOCK_Stream与ACE_SOCK_Connector的TCP通信

1、采用面向过程的方法实现,代码如下所示:

 1 #include <iostream>
 2 #include <ace/SOCK_Connector.h>
 3 #include <ace/INET_Addr.h>
 4 #include <ace/Log_Msg.h>
 5 #include <ace/Time_Value.h>
 6 #include <ace/OS.h>
 7 #include <string>
 8 #include <ace/Init_ACE.h>
 9 #include <thread>
10 
11 using namespace std;
12 
13 ACE_INET_Addr server_addr(9103, "127.0.0.1");
14 ACE_SOCK_Stream stream;
15 ACE_SOCK_Connector connector;
16 
17 void connect_to_server() {
18     ACE::init();
19     ACE_Time_Value timeout(5);
20     if (connector.connect(stream, server_addr, &timeout) == -1) {
21         ACE_ERROR((LM_ERROR, "Connect failed: %s\n", ACE_OS::strerror(errno)));
22         ACE::fini();
23         return;
24     }
25     else
26         ACE_DEBUG((LM_DEBUG,"connect to server success"));
27 }
28 
29 void start_rev()
30 {
31     while (1)
32     {
33         char buffer[1024];
34         ssize_t bytes_received = stream.recv(buffer, sizeof(buffer) - 1);
35         if (bytes_received == -1) {
36             ACE_ERROR((LM_ERROR, "Recv error: %s\n", ACE_OS::strerror(errno)));
37         }
38         else if (bytes_received == 0) {
39             ACE_DEBUG((LM_DEBUG, "Connection closed by server\n"));
40         }
41         else {
42             buffer[bytes_received] = '\0';
43             ACE_DEBUG((LM_DEBUG, "Received: %s\n", buffer));
44         }
45 
46         Sleep(200);
47     }
48 }
49 
50 void send_data(const char* message)
51 {
52     size_t message_len = strlen(message);
53     if (stream.send_n(message, message_len) == -1) {
54         ACE_ERROR((LM_ERROR, "Send failed: %s\n", ACE_OS::strerror(errno)));
55         stream.close();
56         return;
57     }
58     else
59         ACE_DEBUG((LM_DEBUG,"send msg to server success"));
60 }
61 
62 int main(int argc, char* argv[])
63 {
64     connect_to_server();
65 
66     std::thread tr(start_rev);
67     tr.detach();
68 
69     char a;
70 等待输入:std::cin >> a;
71     if (a == 'a')
72     {
73         string requestStr = "{\"lineName\":\"M302\",\"stationName\":\"123\",\"testFileName\":\"13067.412022\"}";
74         send_data(requestStr.c_str());
75         goto 等待输入;
76     }
77 }

2、效果演示

posted @ 2025-05-28 16:25  左边的翼  阅读(23)  评论(0)    收藏  举报