Laden...

[erledigt] Socket.Send(string)

Erstellt von fansi vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.416 Views
F
fansi Themenstarter:in
71 Beiträge seit 2008
vor 14 Jahren
[erledigt] Socket.Send(string)

Hallo,

ich stehe gerade vor nem Problem und weis grad nicht weiter.

Die Socket.send() Funktion will ja ein byte[] zum versenden haben, was im Grunde mein Problem ist. Der empfänger will aber einen string und leider kann ich an dem auch nichts ändern. Wäre das iwie möglich anstatt des byte[] einen string zu versenden?

Vielen danke schon mal für eure bemühungen

Gruß Fansi

W
123 Beiträge seit 2008
vor 14 Jahren

Hallo Fansi,

mit der Encoding-Klasse kannst du die Daten ensprechend wandeln:


// Sender
byte [] buffer = Encoding.Default.GetBytes("blabla");
            
// Empfänger
string str = Encoding.Default.GetString(buffer);

Gruß
wolpertinger

F
fansi Themenstarter:in
71 Beiträge seit 2008
vor 14 Jahren

Der empfänger will aber einen string und leider kann ich an dem auch nichts ändern.

aber danke für deine mühe...

W
123 Beiträge seit 2008
vor 14 Jahren

Der Byte-Buffer enthält die einzelnen Bytes (Zeichnen) des Strings, d.h. es wird also schon der String übertragen. Die Encoding-Klasse wird benötigt, um die reinen Daten aus dem String-Objekt zu extrahieren.

Gruß
wolpertinger

K
593 Beiträge seit 2007
vor 14 Jahren

Hallo fansi,

wolpertinger hat dir doch schon die richtigen Sachen geschrieben. Auf der einen Seite wandelst du deinen String in bytes um sie über Sockets verschicken zu können und auf der anderen Seite machst du aus den Bytes wieder einen String und hast alles was du wolltest 😃

Viele Grüße

Kaji

F
fansi Themenstarter:in
71 Beiträge seit 2008
vor 14 Jahren

Der Byte-Buffer enthält die einzelnen Bytes (Zeichnen) des Strings, d.h. es wird also schon der String übertragen. Die Encoding-Klasse wird benötigt, um die reinen Daten aus dem String-Objekt zu extrahieren.

Das ist mir schon bewusst, wie das abläuft.

**Der empfänger will aber einen string und leider kann ich an dem auch nichts ändern. **

Aber ich komme an die andere Seite nicht ran... Das ich habe ich doch dazu geschrieben. Ich kann an der Empfängerseite nichts ändern, ich komme da nicht ran.

K
593 Beiträge seit 2007
vor 14 Jahren

Hallo Fansi,

dann sind Sockets das falsche medium für die Übertragung 😃 Probier doch mal mit dem TCPClient die verbindung herzustellen und Daten zu senden. Sockets sind rein byte basierend. Im prinzip nutzen andere Technologieren die Sockets als untere Schicht. Es kommt auf die Ebene drauf an wo du ansätzt. Naja egal..^^ Probier mal den TCPClient 😃

Viele Grüße

Kaji

W
123 Beiträge seit 2008
vor 14 Jahren

Aber ich komme an die andere Seite nicht ran...

Das macht nichts. Mit dem beschriebenen Weg überträgst du die ASCII-Zeichen zu Gegenstelle und daraus besteht ja nun mal ein (einfacher) String. Evt. ist es sinnvoll, an den zu versendenden String noch ein Nullzeichen '\0' anzuhängen, damit die Gegenstelle das String-Ende besser erkennen kann.

@Kaji
Der TCPClient ist ja eigentlich nur ein aufgebohrter Socket und den damit verbundenen NetworkStream muss man auch mit Bytes füttern 😃

Gruß
wolpertinger

185 Beiträge seit 2005
vor 14 Jahren

hast du das was wolpertinger geschrieben hat mal probiert? Das ist das was du brauchst.
Ein String ist nichts anderes wie ein byte-array, das da übertragen wird.

K
593 Beiträge seit 2007
vor 14 Jahren

Hallo wolpertinger,

mir ist bewusst das der TCPClient das nur bissl einfacher macht 😃 Aber man kann an den NetworkStream nen Streamwriter mit Strings füttern..^^ Dann wäre Fansi bei seinem String. Das es intern dann wieder bytes werden ist mir schon klar. Nur vllt reicht ja der TCPClient dann muss er sich nicht soviel rumärgern... 😃

Viele Grüße

Kaji

W
123 Beiträge seit 2008
vor 14 Jahren

Aber man kann an den NetworkStream nen Streamwriter mit Strings füttern..^^

Ja natürlich - ich hatte erst mal nur an die Write-Methode gedacht 🙂

Gruß
wolpertiger

F
fansi Themenstarter:in
71 Beiträge seit 2008
vor 14 Jahren

Evt. ist es sinnvoll, an den zu versendenden String noch ein Nullzeichen '\0' anzuhängen, damit die Gegenstelle das String-Ende besser erkennen kann.

Muss das mit der \0 mal ausprobieren. Dass heißt der string würde dann so aussehen:

"MEIN FORMATIERTER STRING\0" oder wie genau sollte der aussehen?

Den string dann in bytes umwandeln und losschicken ist das so richtig?

@MartinH

meinst du das mit der \0?

@all
die andere Methode mit dem TcpClient und Networkstream probiere ich dann auch noch aus.

Danke schon mal für die Antworten

Gruß Fansi

W
123 Beiträge seit 2008
vor 14 Jahren

"MEIN FORMATIERTER STRING\0" oder wie genau sollte der aussehen?
Den string dann in bytes umwandeln und losschicken ist das so richtig?

Richtig !

Gruß
wolpertinger

F
fansi Themenstarter:in
71 Beiträge seit 2008
vor 14 Jahren

Die Methode write() des NetworkSteams will ja aber auch ein byte[] haben? Oder bin ich grad auf dem Holzweg? So war das doch gemeint?


            
            string meintext = "Hallo";

            TcpClient client = null;
            NetworkStream netStream = null;
 
            try
            {
                
                client = new TcpClient(ip, port);
                netStream = client.GetStream();
                 
                netStream.Write();
 
 
            }
            catch (Exception e) { MessageBox.Show(e.Message); }
            netStream.Close();
            client.Close();

K
593 Beiträge seit 2007
vor 14 Jahren

Hallo fansi,

das kann man machen, aber man kann es noch bequemer machen 😃 Indem man an den NetworkStream ein Streamwriter knallt ^^Hier ist eine Applikation geschrieben zum versenden auch mit Strings. Für dich ist der 2te Teil interressant wo der TCPClient benutzt wird 😃

Viele Grüße

Kaji

F
fansi Themenstarter:in
71 Beiträge seit 2008
vor 14 Jahren

Hey Super Danke für die tolle Hilfe Klappt jetzt alles so wie es sein soll 😃

Echt Tolles Forum

Viele Grüße Fansi