Avatar billede simon.ulsnes Nybegynder
07. oktober 2002 - 17:12 Der er 4 kommentarer og
1 løsning

NetworkStream.Read(...)

Jeg har to programmer: En listener, der lytter på port 13 om der er nogen der prøver at oprette forbindelse til den, og et program jeg har kaldt msg som kan sende en hvilken som helst tekststreng til en hvilken som helst modtager på en hvilken som helst port.

De er bygget på TcpListener og TcpClient.

Listener er skrevet ud fra eksemplet i dokumentationen, under System.Net.Sockets.TcpListener.

Jeg starter listener:
Waiting for connection...

Så starter jeg msg i en anden konsol:
Sent message to [IP-adresse] on port 13:
Hej

Så svarer listener:
Connection accepted.

...og begge programmer afsluttes...

Så har jeg prøvet at sende nogle data frem og tilbage mellem klient og server, listener og msg.
I listener har jeg prøvet at dekode den besked der bliver sendt med msg for at vise den på skærmen sådan:

TcpClient client = listener.AcceptTcpClient();
NetworkStream ns = client.GetStream();
byte[] msg = System.Text.Encoding.ASCII.GetBytes("");
ns.Read(msg, 0, 4);

Men det er ikke lykkedes mig endnu at finde en ordentlig måde at konvertere fra byte[] til string...

Jeg prøvede med et foreach loop sådan her:

string message = "";
foreach (byte b in msg)
{
  message += b.ToString();
}

Men jeg fik kun en lang række komplet uforståelige tal (ikke kun nuller og et-taller).

// Simon
// This sentence no verb.
Avatar billede nute Nybegynder
07. oktober 2002 - 17:57 #1
hmmm ... hvorfor ikke hente stringen ut sådan, det er ikke testet, men jeg er rimelig sikker på at det er tilnærmet fremgangsmåte

TcpClient client = listener.AcceptTcpClient();
NetworkStream ns = client.GetStream();
byte[] b = new byte[ ns.Length ]
ns.Read( b, 0, b.Length );
string s=System.Text.Encoding.GetString( b );
Avatar billede simon.ulsnes Nybegynder
07. oktober 2002 - 18:19 #2
ns.Length kaster en exception (System.NotSupportedException) fordi metoden ikke understøttes af Frameworket... lidt irriterende.
Jeg har prøvet dit eksempel, med lidt modifikationer, men jeg kan stadig kun få en masse tal.

// Simon
Avatar billede chries Nybegynder
08. oktober 2002 - 09:54 #3
Hvad med stream reader/writer og så afslutte med enter:
    client = new TcpClient( server, port);
   
    reader = new StreamReader( client.GetStream() );
    writer = new StreamWriter( client.GetStream() );
   
    writer.AutoFlush = true;

....

string inputLine = reader.ReadLine();
...
writer.WriteLine( counter.ToString() );
Avatar billede simon.ulsnes Nybegynder
08. oktober 2002 - 16:18 #4
Hurra, nu virker det!
Jeg bruger bare StreamWriter og StreamReader fra System.IO til at skrive og læse fra NetworkStream-objektet i TcpClient-objektet.

chries, smid lige et svar...

// Simon
Avatar billede chries Nybegynder
08. oktober 2002 - 16:29 #5
ok :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester