Problem beim Daten empfangen und Senden -> TcpClient, Socket
lima-city → Forum → Programmiersprachen → Programmieren mit .NET & Mono
ausgeben
byte
code
datum
ende
falscher stelle
ftp
jeweiligen antworten
kommando
leere strings
machen
problem
sagen
server
string
system
text
url
verbinden
versuchen
-
Hallo,
ich versuche mich mal wieder mit Netzwerkprogrammierung und so^^
Wollte zu anfang eigentlich etwas relativ leichtes machen. Via TCP auf einen FTP Server verbinden und die jeweiligen Antworten des Servers in Textboxen ausgeben.
private void button1_Click(object sender, EventArgs e) { //verbinden TcpClient client = new TcpClient("ftp.lima-city.de", 21); Socket s = client.Client; //status empfangen Byte[] daten = new Byte[256]; s.Receive(daten); // empfangene Daten ausgeben textBox1.Text = System.Text.Encoding.ASCII.GetString(daten, 0, daten.Length); // neue Daten senden Byte[] sendData = System.Text.Encoding.ASCII.GetBytes("USER abc"); s.Send(sendData); // ab hier gibts Probleme s.Receive(daten); daten = new Byte[256]; textBox2.Text = System.Text.Encoding.ASCII.GetString(daten); }
Das erste Send und Receive funktionieren aber beim zweiten Receive hängt die Anwendung-> keine Rückmeldung.
Jemand ne Ahnung wo das Problem liegt? oder hab ich mir das alles viel zu einfach vorgestellt ;)
vielen dank schon mal :D -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo myhead,
Du musst dem FTP-Server noch sagen, dass Dein Kommando zu Ende ist, sonst macht der nichts.
Ich würde es mal mit:
versuchen.Byte[] sendData = System.Text.Encoding.ASCII.GetBytes("USER abc\r\n");
Hier steht auch ein bisschen was dazu:
http://freesoft.org/CIE/RFC/959/20.htm
-
darkpandemic schrieb:
Hallo myhead,
Du musst dem FTP-Server noch sagen, dass Dein Kommando zu Ende ist, sonst macht der nichts.
Ich würde es mal mit:
versuchen.Byte[] sendData = System.Text.Encoding.ASCII.GetBytes("USER abc\r\n");
Vielen dank, genau das war mein Problem :)
EDIT:
Das kommt davon wenn man nur debuggt.
Ich wollte mir die antworten vom Server ausgeben lassen:
solange noch daten vorhanden sind, sollen diese abgeholt werden und in einen String gespeichert werden.
this.data = new Byte[128]; string datatmp = ""; while (socket.Available > 0) { this.socket.Receive(this.data); datatmp += System.Text.Encoding.ASCII.GetString(this.data); } return datatmp
funktioniert beim debuggen, also beim einzelnen durch steppen ganz gut.
Problem ist nur wenn ich das Programm ohne Debug step durchlaufen lassen, dann werden lediglich leere Strings zurückgegeben...warum? habs auch schon mit einem Thread.Sleep versucht. Bringt aber auch nichts =/
EDIT II:
Thread.Sleep() ...richtige Lösung nur an falscher Stelle eingesetzt. Hatte bei jedem Receive einen Sleep, aber was bringt ein Receive, wenn noch keine Anfrage an den Server gesendet wurde xD
Beitrag zuletzt geändert: 8.8.2011 23:27:00 von myhead -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage