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

 

posted @ 2025-03-20 10:09  左边的翼  阅读(39)  评论(0)    收藏  举报