Autor Beitrag
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: 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:
ausblenden volle Höhe Delphi-Quelltext
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: 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 :nixweiss:

TCP-Verbindung

Kann das vielleicht jemand testen und dann einfach sagen, ob alles klappt oder nicht?
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 28.07.07 23:06 
Moin!

user profile iconYogu 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 29.07.07 23:29 
Moin!

user profile iconYogu 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... :nixweiss:

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. :mahn: Konkret also: :idea:
ausblenden 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!" :zwinker:

cu
Narses
Einloggen, um Attachments anzusehen!
_________________
There are 10 types of people - those who understand binary and those who don´t.
Yogu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mo 30.07.07 12:13 
Danke, danke, danke, user profile iconNarses

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.