Avatar billede Fetrix Nybegynder
21. juni 2012 - 15:32 Der er 1 kommentar

Asynkron TCP problem

Hej,

Jeg er i gang med at lave en tekst chat i C# for at få et bedre kendskab til brug af TCP/IP. Jeg har gjort det således, at de 4 første bytes i packets er længden på dataen, mens resten af packeten er dataen. Min modtagende del ser således ud.
http://pastebin.com/zuzRPgLx

Som I nok kan se bliver den ved med at læse data indtil længden, der som sagt angives i starten, er blevet modtaget.

Dette virker, men der er et problem. Hvis modtagerdelen, mens den er ved at modtage, modtager en helt ny packet, går der kludder i det hele. Hvordan kan jeg sikre at packets ikke blandes sammen? Jeg vil gerne undgå at bruge noget i stil med en newline delimiter!

På forhånd tak.
Avatar billede keri Nybegynder
11. juli 2012 - 22:50 #1
Jeg ville nok umiddelbart gøre én af disse:

Implementere en end-sequence til pakken - men det er jo basalt set bare en new line delimiter :-)

Håndtere 'pakkerne' i klasser ala:

private class Message
{
  public int MessageLength;
  public byte[] MessageData;

  public static Message GetMessage(ref byte[] data)
  {
    int length = Convert.ToInt32(data,0);
    if(data.length > length + 4) //all data received
    {
      Message msg = new Message();
      msg.MessageLength = length;
      msg.MessageData = new byte[length];
      Array.Copy(data,4,msg.MessageData,0,length);
      //Truncate data array
      byte[] remainingData = new byte[data.length - length -4];
      Array.copy(data,4+length,remainingData,0,remaingData.length);
      data = remaingData;

      return message;
    }
    return null;
  }
}

Jeg håber du forstår princippet i det - det er dog skrevet uden validering så jeg tvivler på at det vil kompilere ved en copy/paste.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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