Gå til innhold

Anbefalte innlegg

Hei

 

Jeg driver å lager en serverApp som skal ta imot kommandoer og utføre diverse funksjoner utifra hvem kommandoer den mottar.

 

Serveren skal være asynkron, den skal kunne ta imot fra flere klienter og poste data tilbake til de andre klientene.

 

Det jeg lurer på er hvordan jeg får serveren til å fortsette å se etter nye tilkoblinger når den allerede har fått tilkobling til en klient?

 

Har sett at flere eksempler på nettet kjører beginAccept i en while(true) løkke, mens andre har AsyncCallback i beginAccept.

 

Er litt usikker på hvem metode som er mest korrekt?

 

Takker for alle svar

Lenke til kommentar
Videoannonse
Annonse

Ser du bruker en uendelig løkke som fortsetter å se etter tilkoblinger.

 

Jeg vurderer å bruke en uendelig løkke, asyncCallback sørger for å kjøre imellom resten av prosessene.

 

Er det andre måter å utføre prosessen med å se etter nye tilkoblinger enn løkke-metoden?

Er det mulig å holde socketen åpen hele veien så den kan brukes i evt en chat? eller er dette resurskrevende?

Lenke til kommentar

Klipp og lim fra noe kode jeg skrev på jobben:

 

public void OpenGdbListener(int port)
{
   GdbListener = new TcpListener(IPAddress.Loopback, port);

   GdbListener.Start();
   GdbListener.BeginAcceptTcpClient(AcceptClient, null);
   GdbPort = port;
}

private void AcceptClient(IAsyncResult result)
{
   var client = GdbListener.EndAcceptTcpClient(result);
   lock (Clients)
   {
       var gdb = new GdbClient(client);
       gdb.CommandRecieved += new EventHandler<GdbCommandRecievedEventArgs>(gdb_CommandRecieved);
       Clients.Add(gdb);
   }
   GdbListener.BeginAcceptTcpClient(AcceptClient, null);
}

 

GdbClient starter en ny tråd som leser og skriver kommandoer til GDB klienten. Dog denne koden er tiltenkt å brukes kun på lokalmaskinen. For å stoppe BeginAccept så kaller du bare Close() på listener.

 

TcpClient har en funksjon som heter GetStream som lar deg lese og skrive.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...