ACE/FAQ/APG/Misc IPC
Материал из Wiki.crossplatform.ru
Содержание |
[править] UDP Broadcast
/** * $Id: UDP_Broadcast.cpp 80826 2008-03-04 14:51:23Z wotte $ * * Sample code from The ACE Programmer's Guide, * Copyright 2003 Addison-Wesley. All Rights Reserved. */ // Listing 1 code/ch09 #include "ace/OS_NS_string.h" #include "ace/Log_Msg.h" #include "ace/INET_Addr.h" #include "ace/SOCK_Dgram_Bcast.h" int send_broadcast (u_short to_port) { const char *message = "this is the message!\n"; ACE_INET_Addr my_addr (static_cast<u_short> (10101)); ACE_SOCK_Dgram_Bcast udp (my_addr); ssize_t sent = udp.send (message, ACE_OS::strlen (message) + 1, to_port); udp.close (); if (sent == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("send")), -1); return 0; } // Listing 1 int ACE_TMAIN (int, ACE_TCHAR *[]) { send_broadcast (10); return 0; }
[править] UDP Multicast
/** * $Id: UDP_Multicast.cpp 80826 2008-03-04 14:51:23Z wotte $ * * Sample code from The ACE Programmer's Guide, * Copyright 2003 Addison-Wesley. All Rights Reserved. */ // Listing 1 code/ch09 #include "ace/OS_NS_string.h" #include "ace/Log_Msg.h" #include "ace/INET_Addr.h" #include "ace/SOCK_Dgram_Mcast.h" int send_multicast (const ACE_INET_Addr &mcast_addr) { const char *message = "this is the message!\n"; ACE_SOCK_Dgram_Mcast udp; if (-1 == udp.join (mcast_addr)) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("join")), -1); ssize_t sent = udp.send (message, ACE_OS::strlen (message) + 1); udp.close (); if (sent == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("send")), -1); return 0; } // Listing 1 int ACE_TMAIN (int, ACE_TCHAR *[]) { ACE_INET_Addr nop; send_multicast (nop); return 0; }
[править] UDP Unicast
/** * $Id: UDP_Unicast.cpp 80826 2008-03-04 14:51:23Z wotte $ * * Sample code from The ACE Programmer's Guide, * Copyright 2003 Addison-Wesley. All Rights Reserved. */ // Listing 1 code/ch09 #include "ace/OS_NS_string.h" #include "ace/Log_Msg.h" #include "ace/INET_Addr.h" #include "ace/SOCK_Dgram.h" int send_unicast (const ACE_INET_Addr &to) { const char *message = "this is the message!\n"; ACE_INET_Addr my_addr (static_cast<u_short> (10101)); ACE_SOCK_Dgram udp (my_addr); ssize_t sent = udp.send (message, ACE_OS::strlen (message) + 1, to); udp.close (); if (sent == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("send")), -1); return 0; } // Listing 1 // Listing 2 code/ch09 void echo_dgram (void) { ACE_INET_Addr my_addr (static_cast<u_short> (10102)); ACE_INET_Addr your_addr; ACE_SOCK_Dgram udp (my_addr); char buff[BUFSIZ]; size_t buflen = sizeof (buff); ssize_t recv_cnt = udp.recv (buff, buflen, your_addr); if (recv_cnt > 0) udp.send (buff, static_cast<size_t> (buflen), your_addr); udp.close (); return; } // Listing 2 // Listing 3 code/ch09 #include "ace/SOCK_CODgram.h" // Exclude 3 static void show_codgram (void) { char buff[BUFSIZ]; size_t buflen = sizeof (buff); // Exclude 3 const ACE_TCHAR *peer = ACE_TEXT ("other_host:8042"); ACE_INET_Addr peer_addr (peer); ACE_SOCK_CODgram udp; if (0 != udp.open (peer_addr)) ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), peer)); // ... if (-1 == udp.send (buff, buflen)) ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("send"))); // Listing 3 } int ACE_TMAIN (int, ACE_TCHAR *[]) { show_codgram (); return 0; }