Building an Echo Server
The next step is to implement your own echo server. To accomplish this, we'll
modify the client application to function as a server as well. The side benefit
is that this will allow you to test both the client and server application on
your local system.
Remember that the first thing that a server application must do is listen
on a local port for incoming connections. You know that an application is attempting
to connect with you when the Accept event is generated for the SocketWrench
control. There are two methods which you can use to accept an incoming connection:
set the Action property to the value SOCKET_ACCEPT, or set the Accept property.
Setting the Action property is the simplest of the two methods. As you'll recall,
the act of accepting a connection causes a second socket to be created.
The original listening socket continues to listen for more connections, while
the second socket can be used to communicate with the client that connected
to you. When you set the Action property to SOCKET_ACCEPT, what you're telling
the control to do is to close the original listening socket, and from
that point on, the control can be used to communicate with the client. While
this is convenient, it is also limiting -- since the listening socket has been
closed, no more clients can connect with your program, effectively limiting
it to a single client connection.
The more flexible approach is to set the Accept property to the value passed
as an argument to the Accept event. However, this cannot be done by the control
that is listening for connections because it is in use. You have to use another,
unused control to accept the connection. The problem is, how many clients are
going to attempt to connect to you? Of course, you could drop a fixed number
of SocketWrench/VB controls on your form, thereby limiting the number of connections,
but that's not a very good design. The better approach is to create a control
array which can be dynamically loaded when a connection is attempted by
a client, and unloaded when the connection is closed. This is the approach that
we'll take in our server code sample.