From: Stephen Myers on
stephen park wrote:
>> 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.

Have you been able to run the server using a debugger?

Steve