socket.n
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:7k
源码类别:

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1996 Sun Microsystems, Inc.
  3. '" Copyright (c) 1998-1999 by Scriptics Corporation.
  4. '"
  5. '" See the file "license.terms" for information on usage and redistribution
  6. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  7. '"
  8. '" RCS: @(#) $Id: socket.n,v 1.7.2.3 2004/10/27 14:23:58 dkf Exp $
  9. .so man.macros
  10. .TH socket n 8.0 Tcl "Tcl Built-In Commands"
  11. .BS
  12. '" Note:  do not modify the .SH NAME line immediately below!
  13. .SH NAME
  14. socket - Open a TCP network connection
  15. .SH SYNOPSIS
  16. .sp
  17. fBsocket fR?fIoptionsfR? fIhost portfR
  18. .sp
  19. fBsocketfR fB-server fIcommandfR ?fIoptionsfR? fIportfR
  20. .BE
  21. .SH DESCRIPTION
  22. .PP
  23. This command opens a network socket and returns a channel
  24. identifier that may be used in future invocations of commands like
  25. fBreadfR, fBputsfR and fBflushfR.
  26. At present only the TCP network protocol is supported;  future
  27. releases may include support for additional protocols.
  28. The fBsocketfR command may be used to open either the client or
  29. server side of a connection, depending on whether the fB-serverfR
  30. switch is specified.
  31. .PP
  32. Note that the default encoding for fIallfR sockets is the system
  33. encoding, as returned by fBencoding systemfR.  Most of the time, you
  34. will need to use fBfconfigurefR to alter this to something else,
  35. such as fIutf-8fR (ideal for communicating with other Tcl
  36. processes) or fIiso8859-1fR (useful for many network protocols,
  37. especially the older ones).
  38. .SH "CLIENT SOCKETS"
  39. .PP
  40. If the fB-serverfR option is not specified, then the client side of a
  41. connection is opened and the command returns a channel identifier
  42. that can be used for both reading and writing.
  43. fIPortfR and fIhostfR specify a port
  44. to connect to;  there must be a server accepting connections on
  45. this port.  fIPortfR is an integer port number
  46. (or service name, where supported and understood by the host operating
  47. system) and fIhostfR
  48. is either a domain-style name such as fBwww.tcl.tkfR or
  49. a numerical IP address such as fB127.0.0.1fR.
  50. Use fIlocalhostfR to refer to the host on which the command is invoked.
  51. .PP
  52. The following options may also be present before fIhostfR
  53. to specify additional information about the connection:
  54. .TP
  55. fB-myaddrfI addrfR
  56. fIAddrfR gives the domain-style name or numerical IP address of
  57. the client-side network interface to use for the connection.
  58. This option may be useful if the client machine has multiple network
  59. interfaces.  If the option is omitted then the client-side interface
  60. will be chosen by the system software.
  61. .TP
  62. fB-myportfI portfR
  63. fIPortfR specifies an integer port number (or service name, where
  64. supported and understood by the host operating system) to use for the
  65. client's
  66. side of the connection.  If this option is omitted, the client's
  67. port number will be chosen at random by the system software.
  68. .TP
  69. fB-asyncfR
  70. The fB-asyncfR option will cause the client socket to be connected
  71. asynchronously. This means that the socket will be created immediately but
  72. may not yet be connected to the server, when the call to fBsocketfR
  73. returns. When a fBgetsfR or fBflushfR is done on the socket before the
  74. connection attempt succeeds or fails, if the socket is in blocking mode, the
  75. operation will wait until the connection is completed or fails. If the
  76. socket is in nonblocking mode and a fBgetsfR or fBflushfR is done on
  77. the socket before the connection attempt succeeds or fails, the operation
  78. returns immediately and fBfblockedfR on the socket returns 1.
  79. .SH "SERVER SOCKETS"
  80. .PP
  81. If the fB-serverfR option is specified then the new socket
  82. will be a server for the port given by fIportfR (either an integer
  83. or a service name, where supported and understood by the host
  84. operating system; if fIportfR is zero, the operating system will
  85. allocate a free port to the server socket which may be discovered by
  86. using fBfconfigurefR to read the fB-socknamefR option).
  87. Tcl will automatically accept connections to the given port.
  88. For each connection Tcl will create a new channel that may be used to
  89. communicate with the client.  Tcl then invokes fIcommandfR
  90. with three additional arguments: the name of the new channel, the
  91. address, in network address notation, of the client's host, and
  92. the client's port number.
  93. .PP
  94. The following additional option may also be specified before fIhostfR:
  95. .TP
  96. fB-myaddrfI addrfR
  97. fIAddrfR gives the domain-style name or numerical IP address of
  98. the server-side network interface to use for the connection.
  99. This option may be useful if the server machine has multiple network
  100. interfaces.  If the option is omitted then the server socket is bound
  101. to the special address INADDR_ANY so that it can accept connections from
  102. any interface.
  103. .PP
  104. Server channels cannot be used for input or output; their sole use is to
  105. accept new client connections. The channels created for each incoming
  106. client connection are opened for input and output. Closing the server
  107. channel shuts down the server so that no new connections will be
  108. accepted;  however, existing connections will be unaffected.
  109. .PP
  110. Server sockets depend on the Tcl event mechanism to find out when
  111. new connections are opened.  If the application doesn't enter the
  112. event loop, for example by invoking the fBvwaitfR command or
  113. calling the C procedure fBTcl_DoOneEventfR, then no connections
  114. will be accepted.
  115. .PP
  116. If fIportfR is specified as zero, the operating system will allocate
  117. an unused port for use as a server socket.  The port number actually
  118. allocated may be retrieved from the created server socket using the
  119. fBfconfigurefR command to retrieve the fB-socknamefR option as
  120. described below.
  121. .SH "CONFIGURATION OPTIONS"
  122. The fBfconfigurefR command can be used to query several readonly
  123. configuration options for socket channels:
  124. .TP
  125. fB-errorfR
  126. This option gets the current error status of the given socket.  This
  127. is useful when you need to determine if an asynchronous connect
  128. operation succeeded.  If there was an error, the error message is
  129. returned.  If there was no error, an empty string is returned.
  130. .TP
  131. fB-socknamefR
  132. This option returns a list of three elements, the address, the host name
  133. and the port number for the socket. If the host name cannot be computed,
  134. the second element is identical to the address, the first element of the
  135. list.
  136. .TP
  137. fB-peernamefR
  138. This option is not supported by server sockets. For client and accepted
  139. sockets, this option returns a list of three elements; these are the
  140. address, the host name and the port to which the peer socket is connected
  141. or bound. If the host name cannot be computed, the second element of the
  142. list is identical to the address, its first element.
  143. .PP
  144. .SH "EXAMPLES"
  145. Here is a very simple time server:
  146. .CS
  147. proc Server {channel clientaddr clientport} {
  148.    puts "Connection from $clientaddr registered"
  149.    puts $channel [clock format [clock seconds]]
  150.    close $channel
  151. }
  152. fBsocketfR -server Server 9900
  153. vwait forever
  154. .CE
  155. .PP
  156. And here is the corresponding client to talk to the server:
  157. .CS
  158. set server localhost
  159. set sockChan [fBsocketfR $server 9900]
  160. gets $sockChan line
  161. close $sockChan
  162. puts "The time on $server is $line"
  163. .CE
  164. .SH "SEE ALSO"
  165. fconfigure(n), flush(n), open(n), read(n)
  166. .SH KEYWORDS
  167. bind, channel, connection, domain name, host, network address, socket, tcp