ReadMe.Txt
上传用户:hldy006
上传日期:2015-05-15
资源大小:1189k
文件大小:5k
源码类别:

浏览器

开发平台:

Others

  1. Simple IP samples.
  2. -----------------
  3. In this simple example of a client/server pair, both of the programs use
  4. the protocol-independent getaddrinfo and getnameinfo APIs for name resolution,
  5. instead of the legacy gethostbyname and gethostbyaddr APIs (which are IPv4
  6. specific).  The wspiapi.h (WinSock Protocol Independent API) include file
  7. will dynamically load these new APIs on systems where they are supported,
  8. and use statically compiled-in (IPv4 only) versions where they are not.
  9. This allows code written using getaddrinfo and getnameinfo to run on older
  10. (IPv4 only) systems that do not directly support these new APIs.  The
  11. wspiapi.h file is included by tpipv6.h (for this Tech Preview) and will be
  12. included by ws2tcpip.h in future versions of the Microsoft Platform SDK.
  13. While this example uses Winsock 2 (by asking WSAStartup for version 2.2 and
  14. linking with ws2_32.lib), the use of these new APIs does not require it.
  15. By including the Winsock 2 headers, asking WSAStartup for Winsock 1, and
  16. linking with wsock32.lib instead of ws2_32.lib, a binary can be constructed
  17. which will run (in IPv4-only mode) on older systems while still supporting
  18. IPv6 on those systems with an IPv6 stack.
  19. server.c:
  20. ----------
  21. This is a very simple-minded TCP/UDP server. It listens on a specified port
  22. for client connections. When a client connects, the server receives data
  23. and echoes it back to the client.  For connection orientated protocols (TCP),
  24. the server will continue to receive and echo data until the client indicates
  25. that it is done sending.  For connectionless protocols (UDP), each datagram
  26. is echoed individually.
  27. Usage:
  28.   server -f <family> -t <transport> -p <port> -a <address>
  29. Where,
  30.   Family is one of PF_INET, PF_INET6 or PF_UNSPEC.
  31.   Protocol is either TCP or UDP.
  32.   Port is the port number to listen on.
  33.   Address is the IP address to bind to (typically used on multihomed
  34.     machines to restrict reception to a particular network interface
  35.     instead of allowing connections on any of the server's addresses).
  36. In the case where both a protocol family and an address are specified, the
  37. address must be a valid address in that protocol family.
  38. By default the protocol family is left unspecified (PF_UNSPEC), which means
  39. that the server will accept incoming connections using any supported protocol
  40. family.  It does this by creating multiple server sockets, one per family.
  41. Note:
  42. ----
  43. There are differences in the way TCP and UDP "servers" can be written. For
  44. TCP, the paradigm of bind(), listen() and accept() is widely implemented. 
  45. For UDP, however, there are two things to consider:
  46. 1. listen() or accept() do not work on a UDP socket. These are APIs
  47. that are oriented towards connection establishment, and are not applicable
  48. to datagram protocols. To implement a UDP server, a process only needs to
  49. do recvfrom() on the socket that is bound to a well-known port. Clients
  50. will send datagrams to this port, and the server can process these.
  51. 2. Since there is no connection esablished, the server must treat each
  52. datagram separately.
  53. client.c
  54. ---------
  55. A simple TCP/UDP client application. It connects to a specified IP address and
  56. port and sends a small message. It can send only one message, or loop for a
  57. specified number of iterations, sending data to the server and receiving a
  58. response.
  59. Usage:
  60.   client -s <server> -f <family> -t <transport> -p <port> -b <bytes> -n <num>
  61. Where,
  62.   Server is a server name or IP address.
  63.   Family is one of PF_INET, PF_INET6 or PF_UNSPEC.
  64.   Protocol is either TCP or UDP.
  65.   Port is the port number to listen on.
  66.   Bytes is the number of extra data bytes to add to each message.
  67.   Num specifies how many messages to send.
  68.  
  69.   '-n' without any arguments will cause the client to send & receive messages
  70.   until interrupted by Ctrl-C.
  71. Since the protocol family is left unspecified by default, the protcol family
  72. which is used will be that of the address to which the server name resolves.
  73. If a server name resolves into multiple addresses, the client will try them
  74. sequentially until it finds one to which it can connect.
  75. Note:
  76. ----
  77. As explained for server.c, there is no concept of a connection in UDP
  78. communications. However, we can use connect() on a UDP socket. This
  79. establishes the remote (IPaddr, port) to used when sending a datagram.
  80. Thus, we can use send() instead of sendto() on this socket.
  81. This makes the code nearly identical for UDP and TCP sockets. However, it
  82. must be realized that this is still connectionless datagram traffic for
  83. UDP sockets, and must be treated as such.