基于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号