1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

C# Socket Packet richtig versenden

Dieses Thema im Forum "Support & Discussion" wurde erstellt von Al3x, 14. Mai 2018.

  1. Al3x

    Al3x New Member

    Registriert seit:
    14. Mai 2018
    Beiträge:
    2
    Zustimmungen:
    2
    Punkte für Erfolge:
    3
    Geschlecht:
    männlich
    Hallo zusammen,

    ich muss einen Client programmieren der mit einem mir zur Verfügung gestellten Server kommuniziert, über das TCP Protokoll und einer bestimmtem Spezifikation wie die Nachrichten auszusehen haben.
    Das erste Packet soll als Typ = 1 verschickt werden und der Nachrichteninhalt soll ebenfalls die 1(Gruppennummer: vorzeichenloser 8 Bit-Integer) beinhalten.
    Hier einmal ein Bild wie das Packet aufgebaut sein soll laut unseres Dozenten: [​IMG]

    Und hier mein Code:

    Code (Text):

                Socket socket = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                socket.Connect(ipe);

                if(socket.Connected) {
                    Console.WriteLine("Connection established!");
                } else {
                    Console.WriteLine("Connection not established!");
                }

                Byte type = 1;
                Byte[] _typeOfMessage = BitConverter.GetBytes(type);
             
                Byte message = 1;
                Byte[] _message = BitConverter.GetBytes(message);

                Int32 messageLength = 1;
                Byte[] _length = BitConverter.GetBytes(messageLength);
                     
                socket.Send(_typeOfMessage, _typeOfMessage.Length, SocketFlags.None);
                socket.Send(_length, _length.Length, SocketFlags.None);
                socket.Send(_message, _message.Length, SocketFlags.None);
     
    Leider erkennt der Server die Nachricht so nicht korrekt, eine Verbindung besteht jedoch.
    Vielleicht kann mir jemand hier weiterhelfen...

    Liebe Grüße

    Al3x
     
    Zuletzt bearbeitet: 14. Mai 2018
  2. krusty

    krusty Moderator Mitarbeiter Moderator

    Registriert seit:
    1. Juli 2017
    Beiträge:
    36
    Zustimmungen:
    24
    Punkte für Erfolge:
    8
    Geschlecht:
    männlich
    Ort:
    Wadiya
    Hi Al3x,

    Das sieht eigentlich gut aus. Ich habe in .Net immer die TcpClient Klasse verwendet zum senden.
    Code (Text):

    TcpClient client = new TcpClient(server, port);
    NetworkStream stream = client.GetStream();
    byte[] data = BitConverter.GetBytes(type);
    stream.Write(data, 0, data.Length);
    //...
    stream.flush();
     
    Um was für einen Server handelt es sich? Weißt du, ob bei dem Protokoll big-endian verwendet wird?
    Schau mal hier: https://de.wikipedia.org/wiki/Byte-Reihenfolge

    Liebe Grüße Alex
     
  3. Al3x

    Al3x New Member

    Registriert seit:
    14. Mai 2018
    Beiträge:
    2
    Zustimmungen:
    2
    Punkte für Erfolge:
    3
    Geschlecht:
    männlich
    Hallo krusty,

    danke für deine Antwort, hab das mit BigEndian geprüft, daran scheint es nicht zu liegen.
    Vll. sollte ich noch erwähnen dass das ganze unter Ubuntu läuft. Um welche Art von Server es sich handelt kann ich dir jetzt nicht direkt sagen, es ist eine Binary die ich im Terminal ausführe und somit den Server zum laufen bringe. Dieser lauscht dann auf dem Port 7777 bist ich die erste Nachricht an den Port schicke und der Server darauf reagiert.

    //EDIT
    Ich hab es jetzt hinbekommen, ich hab die Größe der Nachricht die ich verschicke, also "messageLength" zuerst noch umgewandelt mit IPAddress.HostToNetworkOrder und anschließend in "_length" als Byte Array konvertiert und verschickt.

    Liebe Grüße

    Al3x
     
    Zuletzt bearbeitet: 16. Mai 2018
    Pentox und krusty gefällt das.

Diese Seite empfehlen

Die Seite wird geladen...