Autor Beitrag
gonzoMD
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Do 07.10.10 09:56 
Im Rahmen meiner FISI-Ausbildung schreibe ich ein Programm, welches Daten per TCP hin und her sendet. Ich habe einen Server, welcher die Daten bereitstellt, diese sind dort in Textboxen gespeichert. Vom Client sende ich nun eine Anfrage ("1" bis "19") von welcher Textbox ich die eventuell vorhandenen Daten haben möchte.
im client werte ich das ganze dann per switch-case aus und sende aus der jeweiligen Textbox entweder die daten oder eine Meldung dass keine Daten vorhanden sind.

Die Anfrage funktioniert, da ich mir dies per MessageBox ausgeben lasse, jedoch wird bei der Antwort (Daten bzw, Meldung) nur das erste Zeichen meines Strings angezeigt.

Hier einmal die entsprechenden Codezeilen:

Client

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
private void button1_Click(object sender, EventArgs e)
{
try
{
ba = asen.GetBytes("1");
stm.Write(ba, 0, ba.Length);
bytesRead = stm.Read(ba, 0, ba.Length);
MessageBox.Show(asen.GetString(ba, 0, bytesRead));
}
catch(Exception ex)
{
MessageBox.Show(ex.Message + "\nEventuell Keine Verbindung vorhanden";);
}

}


server:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
//Nachricht erfolgreich empfangen
toolStripStatusLabel1.Text = "Daten empfangen";
ASCIIEncoding encoder = new ASCIIEncoding();

switch (Convert.ToInt32(encoder.GetString(message, 0, bytesRead)))
{
case 1:
MessageBox.Show("Anfrage an SÜ1");
if (tb1.Text.Equals("";))
{
message = encoder.GetBytes("Kein Tag vorhanden");
}
else
{
message = encoder.GetBytes(tb1.Text);
}
clientStream.Write(message, 0, message.Length);
clientStream.Flush();
break;
//...
}


Da ich Anfänger in C# bin und auch sonst noch nichts mit sockets gemacht haben würde ich mich über rasche Antwort freuen.

mfG Robert

Moderiert von user profile iconKha: Code- durch C#-Tags ersetzt
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 07.10.10 12:10 
:welcome: in der EE!

Du kannst dich nicht darauf verlassen, dass Read sofort alle Daten einliest - deswegen gibt es den Rückgabewert. Umgekehrt kann Read auch nicht zwei verschiedene Anfragen/Antworten unterscheiden, weshalb du einen Trenner dazwischen brauchst. Nimm also am besten jeweils einen StreamReader/Writer und benutze ausschließlich Read/WriteLine zur Übergabe.

_________________
>λ=