基于ACE_SOCK_Dgram的UDP同步通信
1、創建基于ACE_SOCK_DGRAM的UDP服務端
1 void udp_server_base_on_synch() 2 { 3 // 1. 綁定服務端地址(端口 8080) 4 ACE_INET_Addr server_addr(8080); 5 ACE_SOCK_DGRAM sock; 6 if (sock.open(server_addr) == -1) { 7 std::cerr << "Server: Bind failed" << std::endl; 8 return; 9 } 10 11 ACE_DEBUG((LM_INFO, "Server: Listening on port 8080...\n")); 12 13 // 2. 接收數據報 14 char buffer[4096]; 15 ACE_INET_Addr client_addr; 16 ssize_t bytes_received; 17 18 while ((bytes_received = sock.recv(buffer, sizeof(buffer), client_addr)) > 0) { 19 buffer[bytes_received] = '\0'; 20 ACE_DEBUG((LM_INFO, "Server: Received from %s:%d: %s\n", 21 client_addr.get_host_name(), client_addr.get_port_number(), buffer)); 22 } 23 24 sock.close(); 25 }
2、創建基于ACE_SOCK_Dgram的UDP客戶端
1 int udp_send_client(char a) 2 { 3 // 定義服務端地址(IP 127.0.0.1,端口 8080) 4 ACE_INET_Addr server_addr(8080, "127.0.0.1"); 5 ACE_INET_Addr local_addr(8089); 6 // 創建套接字并發送數據 7 ACE_SOCK_DGRAM sock(local_addr); 8 9 const char* message = "123"; 10 ssize_t bytes_sent = sock.send(message, ACE_OS::strlen(message) + 1, server_addr); 11 12 if (bytes_sent == -1) { 13 std::cerr << "Client: Send failed,last error is:" << ACE_OS::last_error() << std::endl; 14 return -1; 15 } 16 17 ACE_DEBUG((LM_INFO, "Client: Sent %d bytes to %s:%d\n", bytes_sent, server_addr.get_host_name(), server_addr.get_port_number())); 18 19 sock.close(); 20 }
3、測試代碼
1 int main(int argc, char* argv[]) 2 { 3 std::thread tr(udp_server_base_on_synch); 4 tr.detach(); 5 Sleep(100); 6 char a; 7 std::cout << "waiting for input:" << std::endl; 8 等待輸入: std::cin >> a; 9 if (a == 'a') 10 { 11 udp_send_client(a); 12 goto 等待輸入; 13 } 14 }
4、測試效果演示

記性太差,需要這么記下來

浙公網安備 33010602011771號