Prev: Blocking mouse clicks
Next: 64-bit MSVFW32.DLL problems
From: Stephen Myers on 13 May 2010 17:34 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
|
Pages: 1 Prev: Blocking mouse clicks Next: 64-bit MSVFW32.DLL problems |