Autor Beitrag
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Mo 30.01.06 13:29 
Hi!
Mir ist während des programmierens was komisches begegnet.
Wenn ich (in meinem Chat) die Ports der Clients (UDP und TCP - jeweils die von Indy 9) verändere, senden die TCP-, bzw. UDP-Clients ohne Probleme auf dem neuen Port.

Nur: Weder der TCP-Server, noch der UDP-Server ändern ihren Port, sie empfangen weiterhin nur auf dem alten Port.
Das komische ist, dass sich dieses Verhalten auch nicht ändere, wenn ich die Server dabei deaktiviere (active := false) oder sogar per Free und ...Create wieder neu erstelle.
Was läuft da falsch?

_________________
Programmers never die, they just GOSUB without RETURN
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 30.01.06 14:17 
Moin!

Schau mal in Zeile 38 von Unit3, ich denke da liegt der Fehler... :roll: :wink:

cu
Narses
alias5000 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Fr 03.02.06 16:20 
tja hast recht. Also ich poste mal hier den code, der die Komponenten neu erstellt.

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:
47:
48:
49:
50:
51:
52:
53:
54:
    //Re-create Servercomponents

    //Man muss dazusagen, dass garantiert ist, dass die Server alle activ = false haben

    //MainForm.UDPServer
    MainForm.UDPServer.Free; 
    MainForm.UDPServer := TidUDPServer.Create(MainForm);
    with MainForm.UDPServer do begin
      BroadcastEnabled := true;
      DefaultPort := mbTBXSpinEdit1.Value; 
      OnUDPRead := MainForm.UDPServerUDPRead;
    end;

    //MainForm.IdUDPServer1 //Nicht wundern, ich hab tatsächlich 2 UDP Server, genauso 2 TCP Server und 2 TCP CLients
    MainForm.idUDPServer1.Free;
    MainForm.idUDPServer1 := TidUDPServer.Create(MainForm);
    with MainForm.idUDPServer1 do begin
      BroadcastEnabled := true;
      DefaultPort := mbTBXSpinEdit2.Value;
      OnUDPRead := MainForm.UDPServerUDPRead;
    end;

    //MainForm.TCPServer
    MainForm.TCPServer.Free;
    MainForm.TCPServer := TIdTCPServer.Create(MainForm);
    with MainForm.TCPServer do begin
      DefaultPort := mbTBXSpinEdit1.Value + 1;
      ThreadMgr := MainForm.IdThreadMgrDefault1;
    end;

    //MainForm.TCPServer1
    MainForm.TCPServer1.Free;
    MainForm.TCPServer1 := TIdTCPServer.Create(MainForm);
    with MainForm.TCPServer1 do begin
      DefaultPort := mbTBXSpinEdit2.Value + 1;
      ThreadMgr := MainForm.IdThreadMgrDefault1;
    end;

   Die Clients müssen nicht zwingend neu erstellt werden.
    //MainForm.TCPClient
   { MainForm.TCPClient.Free;
    MainForm.TCPClient := TidTCPClient.Create(MainForm);
    with MainForm.TCPClient do begin
      Port := mbTBXSpinEdit1.Value + 1;
      ReadTimeout := 100;
    end;}


    //MainForm.TCPClient1
  {  MainForm.TCPClient1.Free;
    MainForm.TCPClient1 := TidTCPClient.Create(MainForm);
    with MainForm.TCPClient1 do begin
      Port := mbTBXSpinEdit2.Value + 1;
      ReadTimeout := 100;
    end;}


Eigentlich finde ich diesen Code nicht zwingend nötig, da es sich eher um etwas prinzipelles handeln wird denk ich, wenn aber nicht, lass ich mich gerne mit was besserem belehren

_________________
Programmers never die, they just GOSUB without RETURN
alias5000 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Fr 03.02.06 22:22 
Achso:
Das iwrd sicher net am Code liegen. Grund:
Das Projekt LanChat2 ( www.lanchat2.de ) hat im neuen Protokoll ja schon 3 verschiedene Clients von 3 verschiedenen Autoren.
Und: bei allen drei geht es nicht, früher ging es auch noch nie.
Und ich bin von den dreien der einzigste, der das mit neu erstellen versucht. Die beiden anderen schalten einfach nur auch activ = false und ändern den Port dann.

Das Ergebnis ist dasselbe: die Server ändern ihren Port nicht, obwohl in Port/DefaultPort der richtige drinnen steht.

Gruß alias5000

_________________
Programmers never die, they just GOSUB without RETURN
alias5000 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Mi 22.03.06 00:28 
Naja, nur damit es zukünftige Leser, die dasselbe Problem haben, nicht falsche Hoffnungen bekommen: ich habs jetzt umgangen eine direkte Lösung ist nicht in Sicht. Das Programm wird neu gestartet, dnn geht es.

Gruß alias5000

_________________
Programmers never die, they just GOSUB without RETURN
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Mi 05.07.06 19:58 
Man hat ja den Indy-Source, haste schonmal durchgebuggt wenne eine Anforderung an den Server kommt, ob er da auch wirklich auf den neuen Port umstellt (bei passiv)? Und zum bei aktiv-Mode, haste da mal geguckt, obs nicht auch noch einen Receive-Piort gibt? (Bei den D6 Kompos TClientSocket und TServerSocket gabs das glaub ich). Wenn ich nachher mal zeit habe, kann ich mal gucken, ob ich etwas auf Anheib finde. Zu mindestens ist es Wahrscheinlich, dass der Server zum Versenden und Empfangen verschiedene Ports nimmt.

PS. Haste schonmal Indy-10 ausprobiert?