基于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、效果演示

记性太差,需要这么记下来

浙公网安备 33010602011771号