Echo server: Difference between revisions
Content added Content deleted
(Defined a new networking task, together with Tcl implementation of it) |
(Constrained implementation choices a bit more) |
||
Line 1: | Line 1: | ||
{{task|Networking and Web Interaction}} |
{{task|Networking and Web Interaction}} |
||
Create a network service that sits on TCP port <tt>12321</tt>, which accepts connections on that port, and which echoes complete lines (using a carriage-return/line-feed sequence as line separator) back to clients. No error handling is required. For the purposes of testing, it is only necessary to support connections from localhost (<tt>127.0.0.1</tt>). Logging of connection information to standard output is recommended. |
Create a network service that sits on TCP port <tt>12321</tt>, which accepts connections on that port, and which echoes complete lines (using a carriage-return/line-feed sequence as line separator) back to clients. No error handling is required. For the purposes of testing, it is only necessary to support connections from localhost (<tt>127.0.0.1</tt>). Logging of connection information to standard output is recommended. |
||
The implementation must be able to handle simultaneous connections from multiple clients. A multi-threaded solution may be used. |
|||
=={{header|Tcl}}== |
=={{header|Tcl}}== |
Revision as of 13:10, 13 May 2009
Echo server
You are encouraged to solve this task according to the task description, using any language you may know.
You are encouraged to solve this task according to the task description, using any language you may know.
Create a network service that sits on TCP port 12321, which accepts connections on that port, and which echoes complete lines (using a carriage-return/line-feed sequence as line separator) back to clients. No error handling is required. For the purposes of testing, it is only necessary to support connections from localhost (127.0.0.1). Logging of connection information to standard output is recommended.
The implementation must be able to handle simultaneous connections from multiple clients. A multi-threaded solution may be used.
Tcl
<lang tcl># How to handle an incoming new connection proc acceptEcho {chan host port} {
puts "opened connection from $host:$port" fconfigure $chan -blocking 0 -buffering line -translation crlf fileevent $chan readable [list echo $chan $host $port]
}
- How to handle an incoming message on a connection
proc echo {chan host port} {
if {[gets $chan line] >= 0} { puts $chan $line } elseif {[eof $chan]} { close $chan puts "closed connection from $host:$port" } # Other conditions causing a short read need no action
}
- Make the server socket and wait for connections
socket -server acceptEcho -myaddr localhost 12321 vwait forever</lang>