I don't know what Joe's program is, but the above is correct when you
are talking to a telnet-like like server.  I have no reason to
question Joe's CAsyncServer, but I have not try it to see what it
suppose to do for you.
What part are you trying to make work?  What are you looking for?
What I would do is begin with the basics of writing a TTY client. If
you are just learning sockets,  you need to begin with the
basics, which comes with "mistakes" and trial and error process.
Try this TTY() function:
void tty(String ^hostname, int port)
{
    Console::WriteLine("* Connecting");
    TcpClient^ c;
    try {
        c =  gcnew TcpClient(hostname,port);
    } catch(SocketException ^e) {
        Console::WriteLine(L"- Connect Error {0}",e->ErrorCode);
        Console::ReadKey();
        return;
    }
    // use 100ms timeout for reader
    c->Client->ReceiveTimeout = 100;
    array<Byte>^ bytes = gcnew array<Byte>(1024);
    NetworkStream ^cio = c->GetStream();
    while (1) {
        if (Console::KeyAvailable) {
            ConsoleKeyInfo^ key = Console::ReadKey(true);
            if (key->Key == ConsoleKey::Escape) break;
            try {
                cio->WriteByte(key->KeyChar);
            } catch( Exception ^e) {
                break;
            }
        }
        try {
            int nBytes = c->Client->Receive( bytes );
            for (int i=0; i < nBytes; i++) {
                Console::Write("{0}",(wchar_t)bytes[i]);
            }
        } catch( SocketException ^e) {
            if (e->ErrorCode == 10054) {
                Console::WriteLine(L"! Disconnect");
                break;
            }
        }
    }
    c->Close();
    Console::WriteLine("* Closed");
    Console::ReadKey();
}
Interesting - this code doesn't work either.  Dr. Newcomer's server
says it got a connection, but when I type stuff in nothing gets sent.
I can CTRL-C and then the server says its disconnected.  Sooo ...
apparently nothing is getting sent?
I did try calling the .net versions of shutdown() and the
NetworkStream class even has a flush() function, although the doc says
that its reserved for future use.  I called it anyway in my code but
still nothing got sent.
Interestingly enough, if I try telnetting to Dr. Newcomer's server I
get the same result as the tty code above - it says its connected, but
nothing gets sent?  I could type stuff in, then hit Ctrl-D, Ctrl-G,
whatever Ctrl combo that might hopefully say I'm done sending stuff,
but nothing goes ...
I must be missing something.  OnReceive() expects a 4 byte length 
followed by n bytes of data.  Sending it raw keystrokes will generate a 
very large length field will take a very long time to satisfy.