Autor |
Beitrag |
barrais
Beiträge: 33
|
Verfasst: Di 02.10.07 10:53
du hast gestern gemeint, wenn man die Unit-Referenzen anpasst, lässt sich TUdpSockUtil mit D5 compilieren.
Weißt du vielleicht welche das sind? und wie man die anpassen kann?
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 02.10.07 12:07
Moin!
phlux in der DP hat folgendes geschrieben: | ein bisschen google hätte geholfen, für
Zitat: | [Fehler] UdpSockUtil.pas(262): Undefinierter Bezeichner: 'DeallocateHWnd'
[Fehler] UdpSockUtil.pas(300): Undefinierter Bezeichner: 'AllocateHWnd' |
musst du die unit classes einbinden ab delphi 6, delphi5 und kleiner die unit forms.
der letzte fehler hängt damit zusammen, dass du zu wenige parameter übergibst |
Also einfach mal:
Delphi-Quelltext
ergänzen und sehen, was der Compiler sagt.
Ich habe leider kein D5, deshalb kann ich dir nicht wirklich helfen...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
barrais
Beiträge: 33
|
Verfasst: Di 02.10.07 13:30
Danke Narses, es hat funktioniert!
Keine Fehler mehr, nur Warnungen:
[Warnung] UdpSockUtil.pas(230): Konstantenausdruck verletzt untere Grenzen
bezieht sich auf folgende Zeile: (FRemoteAddr.S_addr := INADDR_BROADCAST;)
[Warnung] UdpSockUtil.pas(387): Der Vergleich ergibt immer Falsch
bezieht sich auf folgende Zeile: if (Value.S_addr = INADDR_BROADCAST) then
[Warnung] UdpSockUtil.pas(387): Vorzeichenbehaftete und -lose Typen werden verglichen - beide Operanden werden erweitert
bezieht sich auf folgende Zeile: if (Value.S_addr = INADDR_BROADCAST) then
was meinst du, ist das was ernsthaftes, oder kann ich die ignorieren?
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 02.10.07 13:57
Moin!
Mach das mal so:
Delphi-Quelltext 1: 2: 3: 4: 5:
| FRemoteAddr.S_addr := Integer(INADDR_BROADCAST);
if (Value.S_addr = Integer(INADDR_BROADCAST)) then
if (Value.S_addr = Integer(INADDR_BROADCAST)) then |
Was sagt der Compiler jetzt?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
barrais
Beiträge: 33
|
Verfasst: Di 02.10.07 14:38
Danke schön!
der Compiler mekert nicht mehr!
ich versuche jetzt ein binäres Protokoll mit TUdpSockUtil zu schreiben.
Könntest du mir vieleicht Tipps geben?(ich weiß, ich frage zuviel, sorry..)
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 02.10.07 15:14
Moin!
barrais hat folgendes geschrieben: | Danke schön!
der Compiler mekert nicht mehr! |
Fein; bitte. Schickst du mir mal die pas-Datei der Unit per PN zu, damit ich die Änderungen für D5 in das Projekt einpflegen kann?
barrais hat folgendes geschrieben: | ich versuche jetzt ein binäres Protokoll mit TUdpSockUtil zu schreiben.
Könntest du mir vieleicht Tipps geben?(ich weiß, ich frage zuviel, sorry..) |
Grundsätzlich, ja. Aber da ich keine Ahnung habe, was das Ziel dieser Aktion sein soll und welche Daten verarbeitet werden, weiß ich nicht, wie.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
barrais
Beiträge: 33
|
Verfasst: Di 02.10.07 15:48
Hi,
die .pas-Datei habe ich dir per PN geschickt.
Was mein Projekt angeht:
ich habe vor, ein Anwendungsprogramm mit Delphi zu schreiben, das ein Mikrocontroller steuert; und zwar das Programm schickt per Ethernet UDP-Pakete zu dem Mikrocontroller, die Pakete enthalten Kommandos ( Start, Stop, Capture,...), der Mikrocontroller(werde ich noch mit C programmieren) reagiert dem Kommando entsprechend(z.B. start: Messung starten, stop: Messung stoppen, capture: die Messdaten zum PC schicken).Es geht um CAN-Bus Daten (also Binäre daten), die das Anwendungsprogramm dann speichert und binär(halt so wie sie sind!) darstellen muss.
Ich hoffe, du hast jetzt einen Überblick über das projekt.
ich bin für jeden Tipp Dankbar!
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 03.10.07 00:40
Moin!
barrais hat folgendes geschrieben: | ich habe vor, ein Anwendungsprogramm mit Delphi zu schreiben, das ein Mikrocontroller steuert; und zwar das Programm schickt per Ethernet UDP-Pakete zu dem Mikrocontroller, die Pakete enthalten Kommandos ( Start, Stop, Capture,...), |
Damit entfernen wir uns vom TUdpSockUtil (der hat als Socket-Wrapper ja mit dem Protokoll nix zu tun!). Deshalb möchte ich dich bitten, bei weiteren Fragen zur Protokoll-Entwicklung einen passenden Thread in der Sparte Internet / Netzwerk aufzumachen. Hier geht es ja konkret um die Komponente. Danke.
//EDIT: Hier geht´s weiter mit dem Projekt von barrais.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
Zuletzt bearbeitet von Narses am Do 04.10.07 10:28, insgesamt 1-mal bearbeitet
|
|
barrais
Beiträge: 33
|
Verfasst: Do 04.10.07 09:34
|
|
Ernst Budde
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 30.10.07 14:21
Titel: TUDPSockUtil für Delphi5
Ich habe jetzt TUDPSockUtil für Delphi 5 (Windows 2000) installiert. Dazu musste ich RTLConsts.pas hinzufügen und die beiden Classes. .. Aufrufe durch Forms. .. ersetzen.
Kompilieren geht jetzt gut. Aber der erste Test scheitert:
Ich starte z.B. UdpLanChat.exe aus dem Tutorial zweimal auf meinem Rechner. Der 'Senden' Button ist dann zunächst bei beiden grau.
Bei einer der beiden Anwendungen kann ich jetzt 'Online' drücken: Der Senden Button wird dann aktiv. Sobald ich aber auf der anderen Anwendung 'Online' drücke, bekomme ich ERROR 10048 und der 'Senden' button bleibt grau. Es kann doch nicht sein, dass man nur sich selbst etwas senden kann!
Ich habe den Code der Komponente noch nicht gelesen (und möchte das eigentlich auch nicht), aber eine Frage: Wird vielleicht beim Drücken des 'Online' Button versucht, einen SERVER einzurichten? Das sollte ja bei UDP nicht nötig sein, würde aber den Fehler erklären, denn auf einem Rechner dürfen nicht zwei Server mit gleicher Portnummer arbeiten.
Ernst
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 30.10.07 15:38
Titel: Re: TUDPSockUtil für Delphi5
Moin!
Ernst Budde hat folgendes geschrieben: | eine Frage: Wird vielleicht beim Drücken des 'Online' Button versucht, einen SERVER einzurichten? |
Genau so ist es.
Ernst Budde hat folgendes geschrieben: | Das sollte ja bei UDP nicht nötig sein, |
Aha, und wie willst du dann Daten empfangen?
Ernst Budde hat folgendes geschrieben: | würde aber den Fehler erklären, denn auf einem Rechner dürfen nicht zwei Server mit gleicher Portnummer arbeiten. |
AFAIR steht genau zu deinem "Problem" ein entsprechender Hinweis im Chat-Tut. Man kann das Demo-Programm jeweils nur einmal auf dem PC online schalten.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
GrubenPete
Hält's aus hier
Beiträge: 10
Windows 7 32bit, Windows XP 32bit, Windows 200032bit, Ubuntu 32bit, openSuSe 10.3
Delphi 7 Pers., Turbo Delphi
|
Verfasst: Mo 17.03.08 01:43
Hi, ich benutze TUdpSockUtil um im LAN alle aktiven Server für mein Spiel zu finden.
Gleichzeitig läuft auch ein TCPServer (von den Indys).
UDPSockUtil.Listen hab ich auf true und der TCPServer is auch aktiv.
Sende ich nun ne Broadcast erhalte ich ganz normal Antworten von allen Servern, will ich mich aber dann mit einem von denen per TCP Verbinden, kommt ein 'Connection refused'.
Hab dann mal testweise vorm verbinden mit TCP über die UDP-Komponente an meinen RemoteHost nen Befehl gesendet, der Listen auf false setzt und siehe da, ich kann mich via TCP auf den Host verbinden.
Nun meine Frage.^^ Lässt sich das irgendwie unterbinden, dass ich den UDP-'Listener' ausschalten muss, um mich mit dem TCPServer zu vebinden ?
Sascha
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 17.03.08 02:00
Moin!
GrubenPete hat folgendes geschrieben: | Hab dann mal testweise vorm verbinden mit TCP über die UDP-Komponente an meinen RemoteHost nen Befehl gesendet, der Listen auf false setzt und siehe da, ich kann mich via TCP auf den Host verbinden.
Nun meine Frage.^^ Lässt sich das irgendwie unterbinden, dass ich den UDP-'Listener' ausschalten muss, um mich mit dem TCPServer zu vebinden ? |
TCP und UDP haben je einen eigenen Port-Adressraum, ausserdem wird ja für den TCP- und den UDP-Listener je ein eigenes Binding erstellt. Ich kann mir nicht vorstellen, dass der TUdpSockUtil den IdTCPServer daran hindern sollte, eine Verbindung anzunehmen.
Kurz: ich kann dir nicht sagen, woran es in deinem Projekt liegt, aber deinen "Verdacht" halte ich für sehr unwahrscheinlich. (ich habe selbst Projekte in dieser Konstellation laufen, da gibt es keine Probleme)
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
GrubenPete
Hält's aus hier
Beiträge: 10
Windows 7 32bit, Windows XP 32bit, Windows 200032bit, Ubuntu 32bit, openSuSe 10.3
Delphi 7 Pers., Turbo Delphi
|
Verfasst: Mo 17.03.08 13:17
Hmm, hatte ich mir ja eigentl. auch gedacht, aber hab trotzdem mal verschiedene Ports ausprobiert. Ohne Erfolg.
Aus irgendeinem Grund müssen sich die beiden Server aber irgendwie in die Quere kommen, ich weiß aber nich warum.
Wenn ich wieder ab meinem PC bin poste ich mal den relevanten Quellcode sowie die einzelnen Einstellungen... Vielleicht findet sich ja dann irgendwo ein Fehler^^
Sascha
|
|
GrubenPete
Hält's aus hier
Beiträge: 10
Windows 7 32bit, Windows XP 32bit, Windows 200032bit, Ubuntu 32bit, openSuSe 10.3
Delphi 7 Pers., Turbo Delphi
|
Verfasst: Mo 17.03.08 16:54
Joa, das sind die meiner Meinung nach relevanten Zeilen..
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:
| [...]
procedure TForm1.FormCreate(Sender: TObject); begin myUDP := TUDPSockUtil.Create(self); myUDP.RemotePort := UDP_PORT; myUDP.LocalPort := UDP_PORT; myUDP.OnReceive := myUDPReceive; myUDP.OnError := myUDPError; myUDP.Listen := true;
myTCPClient.BoundIP := myIPWatch.LocalIP; myTCPClient.BoundPort := TCP_CLIENT_PORT; myTCPServer.DefaultPort := TCP_SERVER_PORT; myTCPServer.Active := true;
[...]
end;
procedure TForm1.Button2Click(Sender: TObject); begin Log.Lines.Add(TimeToStr(now) +': Sending Broadcast Question'); myUDP.BroadcastText(APP_ID+#13+ Syntax[cmdBroadAsk].Text+#13); ServerList.SetFocus; end;
procedure TForm1.ServerListClick(Sender: TObject); var server: string; begin if ( ServerList.Row > 0 ) and ( ServerList.Row < ServerList.RowCount ) and not ( ServerList.Cells[1,ServerList.Row] = '' ) then begin server := copy(ServerList.Cells[1,ServerList.Row],1,pos(' (',ServerList.Cells[1,ServerList.Row])); Log.Lines.Add('Trying to connect to ' + server); myUDP.RemoteHost := server; myUDP.SendText(APP_ID+#13+ Syntax[cmdStop].Text+#13); myTCPClient.Host := server; myTCPClient.Port := TCP_SERVER_PORT; myTcpClient.Connect(); end; end;
[...] |
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 17.03.08 17:26
Moin!
Der Codeschnipsel ist zu kurz, da kann ich nix erkennen. Interessanter ist auch eher die Empfänger-Seite, würde ich sagen. Vor allem ist der IdTCPServer ja multithreaded; sicher, dass du dir da keine Thread-Problematik eingehandelt hast? Wäre jetzt so mein Tipp...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
GrubenPete
Hält's aus hier
Beiträge: 10
Windows 7 32bit, Windows XP 32bit, Windows 200032bit, Ubuntu 32bit, openSuSe 10.3
Delphi 7 Pers., Turbo Delphi
|
Verfasst: Mo 17.03.08 18:20
Hey, es lag an den Threads^^ Sorry, aber is das erste mal, dass ich so richtig mit den Indys arbeite.
Das Verbinden klappt jetzt wunderbar, jedenfalls beim ersten mal.
Danke trotzdem^^
Sascha
|
|
Jann1k
Beiträge: 866
Erhaltene Danke: 43
Win 7
TurboDelphi, Visual Studio 2010
|
Verfasst: Di 18.03.08 00:18
Hi Narses,
ich versuche grade die Komponente zu installieren und halte mich dabei an dein Tutorial. Mein delphi 7 gibt mir auch die Meldung aus dass das Projekt neu kompiliert werden muss, klicke ich dann auf "Ja" kriege ich folgende Fehlermeldung :
Delphi-Quelltext 1:
| [Fatal Error] dclusr.dpk(47): File not found: 'GIFCODE.dcu' |
und das installieren der Komponente scheitert.
Zusätzlich kriege ich noch zwei Warnungen:
Delphi-Quelltext 1: 2: 3:
| [Warning] dclusr.dpk(5): File not found: '..\..\..\..\dokumente und einstellungen\sebastian & martin\desktop\icq_20040630\icq\component\ICQClient.dcr'
[Warning] dclusr.dpk(6): File not found: '..\..\..\..\Dokumente und Einstellungen\Sebastian & Martin\Desktop\icq_20040630\ICQ\Component\ICQDb.dcr' |
Was tun?
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 18.03.08 00:33
Moin!
Jann1k hat folgendes geschrieben: | klicke ich dann auf "Ja" kriege ich folgende Fehlermeldung :
Quelltext 1:
| [Fatal Error] dclusr.dpk(47): File not found: 'GIFCODE.dcu' |
und das installieren der Komponente scheitert.
Zusätzlich kriege ich noch zwei Warnungen: |
Sieht aus, als wäre dein DefaultUserPackage zermatscht (du wirst vermutlich schon einige andere Komponenten hineininstalliert haben und diese möglicherweise nicht sauber deinstalliert oder Teile der Quellen verschoben).
Jann1k hat folgendes geschrieben: | Was tun? |
Du kannst die Komponente einfach in ein neues Package installieren oder das Default-Package (dcluser.dpk) löschen und ein Neues anlegen (wenn du sicher bist, dort keine Kompos drin zu haben, die du aktuell noch im Einsatz hast).
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Jann1k
Beiträge: 866
Erhaltene Danke: 43
Win 7
TurboDelphi, Visual Studio 2010
|
Verfasst: Di 18.03.08 00:45
Zitat: | Sieht aus, als wäre dein DefaultUserPackage zermatscht |
Gut zu wissen, worauf man beim nöchsten mal achten muss.
Zitat: | Du kannst die Komponente einfach in ein neues Package installieren oder das Default-Package (dcluser.dpk) löschen und ein Neues anlegen |
Dankeschön, für die schnelle Hilfe - funktioniert problemlos.
Moderiert von Narses: Delphi- durch Quote-Tags ersetzt
|
|