udpsock.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:5k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * udpsock.h
  3.  *
  4.  * User Datagram Protocol socket I/O channel class.
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: udpsock.h,v $
  30.  * Revision 1.16  1999/08/27 08:18:52  robertj
  31.  * Added ability to get the host/port of the the last packet read/written to UDP socket.
  32.  *
  33.  * Revision 1.15  1999/03/09 02:59:51  robertj
  34.  * Changed comments to doc++ compatible documentation.
  35.  *
  36.  * Revision 1.14  1999/02/16 08:11:17  robertj
  37.  * MSVC 6.0 compatibility changes.
  38.  *
  39.  * Revision 1.13  1998/09/23 06:21:47  robertj
  40.  * Added open source copyright license.
  41.  *
  42.  * Revision 1.12  1997/06/06 10:54:11  craigs
  43.  * Added overrides and new functions for connectionless Writes
  44.  *
  45.  * Revision 1.11  1996/09/14 13:09:43  robertj
  46.  * Major upgrade:
  47.  *   rearranged sockets to help support IPX.
  48.  *   added indirect channel class and moved all protocols to descend from it,
  49.  *   separating the protocol from the low level byte transport.
  50.  *
  51.  * Revision 1.10  1996/05/15 10:19:15  robertj
  52.  * Added ICMP protocol socket, getting common ancestor to UDP.
  53.  *
  54.  * Revision 1.9  1996/03/03 07:38:00  robertj
  55.  * Added Reusability clause to the Listen() function on sockets.
  56.  *
  57.  * Revision 1.8  1995/12/10 11:44:45  robertj
  58.  * Numerous fixes for sockets.
  59.  *
  60.  * Revision 1.7  1995/06/17 11:13:41  robertj
  61.  * Documentation update.
  62.  *
  63.  * Revision 1.6  1995/06/17 00:48:01  robertj
  64.  * Implementation.
  65.  *
  66.  * Revision 1.5  1995/01/03 09:36:24  robertj
  67.  * Documentation.
  68.  *
  69.  * Revision 1.4  1994/08/23  11:32:52  robertj
  70.  * Oops
  71.  *
  72.  * Revision 1.3  1994/08/22  00:46:48  robertj
  73.  * Added pragma fro GNU C++ compiler.
  74.  *
  75.  * Revision 1.2  1994/07/25  03:36:03  robertj
  76.  * Added sockets to common, normalising to same comment standard.
  77.  *
  78.  */
  79. #define _PUDPSOCKET
  80. #ifdef __GNUC__
  81. #pragma interface
  82. #endif
  83. /**
  84.    A socket channel that uses the UDP transport on the Internet Protocol.
  85.  */
  86. class PUDPSocket : public PIPDatagramSocket
  87. {
  88.   PCLASSINFO(PUDPSocket, PIPDatagramSocket);
  89.   public:
  90.   /**@name Construction */
  91.   //@{
  92.     /** Create a UDP socket. If a remote machine address or
  93.        a "listening" socket is specified then the channel is also opened.
  94.      */
  95.     PUDPSocket(
  96.       WORD port = 0             /// Port number to use for the connection.
  97.     );
  98.     PUDPSocket(
  99.       const PString & service   /// Service name to use for the connection.
  100.     );
  101.     PUDPSocket(
  102.       const PString & address,  /// Address of remote machine to connect to.
  103.       WORD port                 /// Port number to use for the connection.
  104.     );
  105.     PUDPSocket(
  106.       const PString & address,  /// Address of remote machine to connect to.
  107.       const PString & service   /// Service name to use for the connection.
  108.     );
  109.   //@}
  110.   /**@name Overrides from class PSocket */
  111.   //@{
  112.     /** Override of PChannel functions to allow connectionless reads
  113.      */
  114.     BOOL Read(
  115.       void * buf,   /// Pointer to a block of memory to read.
  116.       PINDEX len    /// Number of bytes to read.
  117.     );
  118.     /** Override of PChannel functions to allow connectionless writes
  119.      */
  120.     BOOL Write(
  121.       const void * buf, /// Pointer to a block of memory to write.
  122.       PINDEX len        /// Number of bytes to write.
  123.     );
  124.     /** Override of PSocket functions to allow connectionless writes
  125.      */
  126.     BOOL Connect(
  127.       const PString & address   /// Address of remote machine to connect to.
  128.     );
  129.   //@}
  130.   /**@name New functions for class */
  131.   //@{
  132.     /** Set the address to use for connectionless Write().
  133.      */
  134.     void SetSendAddress(
  135.       const Address & address,    /// IP address to send packets.
  136.       WORD port                   /// Port to send packets.
  137.     );
  138.     /** Get the address to use for connectionless Write().
  139.      */
  140.     void GetSendAddress(
  141.       Address & address,    /// IP address to send packets.
  142.       WORD & port           /// Port to send packets.
  143.     );
  144.     /** Get the address of the sender in the last connectionless Read().
  145.         Note that thsi only applies to the Read() and not the ReadFrom()
  146.         function.
  147.      */
  148.     void GetLastReceiveAddress(
  149.       Address & address,    /// IP address to send packets.
  150.       WORD & port           /// Port to send packets.
  151.     );
  152.   //@}
  153.   protected:
  154.     virtual BOOL OpenSocket();
  155.     virtual const char * GetProtocolName() const;
  156.     Address sendAddress;
  157.     WORD    sendPort;
  158.     Address lastReceiveAddress;
  159.     WORD    lastReceivePort;
  160. #ifdef DOC_PLUS_PLUS
  161. };
  162. #endif
  163. // Class declaration continued in platform specific header file ///////////////