-// $Id: Mainpage.dox 625 2008-01-16 12:00:00Z Pug $
+// $Id$
//
-// Copyright (C) 2007
-// Fraunhofer Institute for Open Communication Systems (FOKUS)
-// Competence Center NETwork research (NET), St. Augustin, GERMANY
+// Copyright (C) 2008
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
// Stefan Bund <g0dil@berlios.de>
//
// This program is free software; you can redistribute it and/or modify
// Free Software Foundation, Inc.,
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-/** \mainpage UDP Client/Server example application
+/** \mainpage UDP Client/Server example application
\dontinclude udpServer.cc
This Application is a command line based client/server application, which sends some strings from
client to server, where they are printed on the command line.
- After installing the Library, the udpServer and the udpClient can be found in the
- senf/Example/udpServer directory and compiled with
+ After installing the Library, the udpServer and the udpClient can be found in the
+ senf/Example/udpServer directory and compiled with
<pre>
- #scons -u
+ # scons -u
<Then you can start the client/server with>
- #./udpServer
- #./udpClient
+ # ./udpServer
+ # ./udpClient
</pre>
- When we take a look to the code, we start with the Server:
- First we include the necessary headers:
+ When we take a look to the code, we start with the Server:
+ First we include the necessary headers:
\skip // Custom includes
\until membind
- The Scheduler will be needed because we implement a non blocking UDP Server with the %senf
- integrated Scheduler. The scheduler library provides a simple yet flexible abstraction of
+ The Scheduler will be needed because we implement a non blocking UDP Server with the %senf
+ integrated Scheduler. The scheduler library provides a simple yet flexible abstraction of
the standard asynchronous UNIX mainloop utilizing \c select or \c poll.
\section UDP_serverApplication UDP server application
First we define a class which is responsible for opening a socket and print out the incoming
- data on stdout. We create a \c UDPv4ClientSocketHandle, which is an unconnected and
+ data on stdout. We create a \c ::UDPv4ClientSocketHandle, which is an unconnected and
uninitialized UDP (Ipv4) socket.
\until serverSock;
\until {}
- The public \c run() member is called to run the sniffer. It first adds the socket to the
- Scheduler. The \c add() call takes two Arguments, the socket to bind to (which can be a
- lot of things and must not necessarily be a socket instance) and callback function to call,
- whenever there is an event on that socket.The callback is specified as a
- <a href="http://www.boost.org/doc/html/function.html">Boost.Function</a> object. A third
- argument may be specified to restrict the events, on which the function is called, here we
+ The public \c run() member is called to run the sniffer. It first adds the socket to the
+ Scheduler. The <tt> \link senf::Scheduler::add add() \endlink </tt> call takes two Arguments,
+ the socket to bind to (which can be a lot of things and must not necessarily be a socket
+ instance) and callback function to call, whenever there is an event on that socket.The callback
+ is specified as a <a href="http://www.boost.org/doc/html/function.html">Boost.Function</a> object.
+ A third argument may be specified to restrict the events, on which the function is called, here we
used the EV_READ Argument, because we just want the program to read from the socket.
The default argument is set to \c senf::Scheduler::EV_ALL, which allows all actions on the socket.
\until }
- Calling the Schedulers \c process() method will start the event loop. This call does not
- return (ok, it does return in special cases if \c senf::Scheduler::terminate() is called which
- does not apply here). The Callback Function is the \c readFromClient() Function, which is
- declared as private here and will be called whenever an event on the socket is encountered.
- The scheduler passes the event ID to the function.
+ Calling the Schedulers <tt> \link senf::Scheduler::process process()\endlink </tt> method will
+ start the event loop. This call does not return (ok, it does return in special cases if
+ \c senf::Scheduler::terminate() is called which does not apply here). The Callback Function is
+ the \c readFromClient() Function, which is declared as private here and will be called whenever
+ an event on the socket is encountered. The scheduler passes the event ID to the function.
\until event)
- In the function the data from the socket is put into a standard string and dumped out on stdout.
+ In the function the data from the socket is put into a standard string and dumped out on stdout.
\until };
\until return 0;
- That's it. We finish of by catching the exception and giving as much detail as possible if an
+ That's it. We finish of by catching the exception and giving as much %detail as possible if an
exception is caught. The \c prettyName function from the \c Utils library is used, to get a nice,
- printable representation of the dynamic type of the exception instance. It is an interface to
- the g++ demangler. This is necessary since the name member of the C++ \c type_info instance is
+ printable representation of the dynamic type of the exception instance. It is an interface to
+ the g++ demangler. This is necessary since the name member of the C++ \c type_info instance is
a mangled name in g++.
\section UDP_clientApplication UDP client application
-
+
\dontinclude udpClient.cc
- The client application uses the same mechanisms, but implements them in a small main function.
- It sends numbers as strings to the server.
+ The client application uses the same mechanisms, but implements them in a small main function.
+ It sends numbers as strings to the server.
\skip argv[])
\until return 0;
- First a \c UDPv4ClientSocketHandle is created. With the function
+ First a \c ::UDPv4ClientSocketHandle is created. With the function
\c writeto(senf::INet4SocketAddress, string) the string s will be written to the specified
- address and port, which is constructed here from a static string \c "127.0.0.1:4243". In this
- example Integers from zero to ten are send to the Server socket.
+ address and port, which is constructed here from a static string read from the console with the format \c IP:PORT. In this
+ example Integers from zero to ten are send to the Server socket.
The exception handling is again the same as with the server application.
*/