| Autor |
Beitrag |
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Do 26.07.07 11:52
Warum kann ich per TCP keine Daten senden?[meta]TCP, CRLF, Senden, #13#10[/meta]
Lösung: Nach jedem zu Sendendem Text müssen die beiden Zeichen #13#10 hinzugefügt werden.
Hallo,
Ich mache schon ewig an diesem blöden Problem rum: Die Logindaten an den POP3-Server zu senden. Ich benutze die Komponente TTCP von ISP.
Mit einem kleinen Chat hat die Übertragung problemlos funktioniert, jetzt aber klappt das irgendwie nicht. Ich weiß nicht, ob die Daten zum Server kommen, jedenfalls antwortet dieser nicht.
Hier mal der Code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| procedure TForm1.TCPDataArrival(Sender: TObject; bytesTotal: Integer); var Data: OleVariant; Answer, Command: String; begin if State = stConnected then begin TCP.GetData(Data, oleString, MaxLength); Answer := Data; if Answer[1] = '+' then begin State := stSendUser; Command := 'USER '+UserEdit.Text; Data := Command; TCP.SendData(Data); LogBox.Items.Add('Antwort: '+Answer); LogBox.Items.Add('Befehl: '+Command); end else begin State := stError; LogBox.Items.Add('Antwort: '+Answer); LogBox.Items.Add('Fehler: Konnte nicht mit '+TCP.RemoteHost+' verbinden.'); end; Exit; end; if State = stSendUser then begin TCP.GetData(Data, oleString, MaxLength); Answer := Data; if Answer[1] = '+' then begin State := stSendPass; Command := 'PASS '+PassEdit.Text; Data := Command; TCP.SendData(Data); LogBox.Items.Add('Antwort: '+Answer); LogBox.Items.Add('Befehl: PASS '+CharString('*', Length(PassEdit.Text))); end else begin State := stWrongUser; LogBox.Items.Add('Antwort: '+Answer); LogBox.Items.Add('Fehler: Benutzername falsch'); end; Exit; end; end; |
Die Verbindung aufbauen und so klappt, auch die Wilkommens-Meldung wird gesendet. Dadurch wird dieses Ereignis ausgelöst, und ich sende die Login-Daten. Dann warte ich auf weitere OnDataArrival-Ereignisse, doch es kommt keines mehr.
Die Technik müsste eigentlich klappen, ich habe es in einer anderen Programmiersprache schon ausprobiert.
EXE-Datei testen
Quellcode ansehen
Danke schonmal,
Yogu
Edit: Falls ihr den Quellcode braucht, ich hab ihn mal als Link eingefügt. Oder warum wissen 10 Mitglieder nicht weiter?
Zuletzt bearbeitet von Yogu am Mo 13.12.10 19:27, insgesamt 7-mal bearbeitet
|
|
Yogu 
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Fr 27.07.07 21:25
OK, wenn keiner die Antwort weiß, dann jetzt die Lösung:
Es liegt daran, dass die Daten nicht an den Server kommen. Jetzt ist nur noch das Problem, warum. In einem lokalen Austausch (von 127.0.0.1 zu 127.0.0.1) klappt alles, nur bei aufgebauten Verbindungen nach außen klappt es nicht.
Benutzt jemand TTCP und kann einen Quellcode zum Senden posten? Ich wäre sehr dankbar.
Was mir auch sehr helfen würde, wäre eine andere Komponente, beid der das besser klappt...
Zuletzt bearbeitet von Yogu am Sa 29.12.07 18:28, insgesamt 1-mal bearbeitet
|
|
Yogu 
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Fr 27.07.07 22:49
So, jetzt habe ich es auch mit TClientSocket probiert, und ich komm immer noch nicht ans Datensenden.
Langsam verzweifel ich. Hat jemand eine Idee, woran das liegen könnte?
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 27.07.07 23:01
Schau mal hier bzw. hier.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Yogu 
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Sa 28.07.07 13:21
Das Tutorial kann ich leider nicht durchmachen, ich habeim Moment nur Delphi 3.
Ich habe die EXE mal hochgeladen, kann das vielleicht mal jemand ausprobieren? Ich habe nämlich den Verdacht, dass das vielleicht nicht am Programm sondern an meinem PC liegt...
Obwohl alle anderen Internetprogramme reibungslos funktionieren
TCP-Verbindung
Kann das vielleicht jemand testen und dann einfach sagen, ob alles klappt oder nicht?
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 28.07.07 23:06
Moin!
Yogu hat folgendes geschrieben: | | Kann das vielleicht jemand testen und dann einfach sagen, ob alles klappt oder nicht? |
Wenn du den Quelltext der TClientSocket-Version ohne die EXE als ZIP hier in den Anhang stellst, dann schau ich´s mir mal an (hab aber "nur" D7pro, sollte dann damit auch funktionieren - bzw. bei Änderungen von mir weiß ich nicht, ob das auch unterhalb von D7pro klappt).
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Yogu 
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: So 29.07.07 20:58
Natürlich, kann auch die Programmdateien hochladen, aber warum probierst du nicht einfach die EXE aus?
Programmdateien
EXE-Datei
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 29.07.07 23:29
Moin!
Yogu hat folgendes geschrieben: | | warum probierst du nicht einfach die EXE aus? |
Ich vermeide es, EXecutables auszuführen, wenn ich kann; besonders, wenn diese vom Autor bereits in Frage gestellt werden...
Scheint zu schwer zu sein, hier was in den Anhang zu stellen...  Also mach ich das mal für dich, damit man das Problem auch später noch nachvollziehen kann, wenn dein Server nicht online sein sollte.
Und hier ist dein "Problem": du schließt deine Kommandos nicht mit einem CRLF ab, wie in www.ietf.org/rfc/rfc1939.txt gefordert.  Konkret also:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.SendBtnClick(Sender: TObject); begin RTFText := RTFText + #13'{\cf2 Client: '+Edit.Text+' \par}'; UpdateRTF;
TCP.Socket.SendText(Edit.Text+#13#10); Edit.Text := ''; end; |
"Kaum macht man´s richtig, geht´s!"
cu
Narses
Einloggen, um Attachments anzusehen!
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Yogu 
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mo 30.07.07 12:13
Danke, danke, danke, Narses
Hab ich nicht gewusst, in BlitzBasic entfällt dieses, wird wahrscheinlich schon automatisch hinzugefügt. So klappt alles wunderbar!
Und warum ich die Dateien nicht in den Anhang stelle: Mein Server ist viel zu unterbelastet, da funktionieren die Downloads bestimmt mindestens doppelt so schnell. Aber ist eigentlich totzdem gut, auch ein Anhang zu erstellen.
|
|
|