AMIGA-RESISTANCE https://forum.amiga-resistance.info/ |
|
UDP Netzwerkverbindung prüfen https://forum.amiga-resistance.info/viewtopic.php?f=38&t=3559 |
Seite 1 von 1 |
Autor: | DieterG [ 12 Apr 2018, 09:22 ] |
Betreff des Beitrags: | UDP Netzwerkverbindung prüfen |
Etwas kompliziert, aber ich hoffe das Problem rüber bringen zu können: UDP Netzwerkverbindungen sind verbindungslos, d.h. das eine Verbindung in dem Sinne garnicht existiert, sondern einer sendet, und der andere antwortet wenn er denn da ist, ansonsten passiert eben nichts. Deshalb kann der Sender auch nie davon ausgehen, das irgendwas angekommen ist, sondern der empfänger muss das bestätigen. In Hollywood gibt es dafür die Functionen "CreatUDPObjekt" was noch nichts im Netzwerk macht und dann eben SendUDPData bzw das Gegenstück ReceiveUDPData. Soweit die Gegenstelle da ist ist auch alles wunderbar, das heisst ich bekomme entsprechend meine Antwort oder auch nicht. Doch wenn die Gegenstelle nicht existiert bzw. dort z.B. kein TFTP-Server läuft, dann wird irgendwann das UDPObject geschlossen. Das sieht dann so aus, das im Interpreter ein Programmabbruch mit der Meldung "object closed" kommt wenn man senden oder empfangen will. Da ich im moment nur die Trialversion habe, weiß ich nicht was ein compiliertes Programm in diesem Fall tun würde. Auf jeden Fall ist das Mist, es gibt auch keine Möglichkeit vorher zu prüfen ob die Gegenstelle denn da ist und auf dem Port empfangsbereit. Mit allem anderen als Abbruch könnte ich leben, und das entsprechend handeln aber so habe ich keine Möglichkeit gefunden den Programmabbruch zu verhindern. Irgendjemand eine Idee oder ist es einfach nur ein Hollywood-Bug ? |
Autor: | HelmutH [ 12 Apr 2018, 18:28 ] |
Betreff des Beitrags: | Re: UDP Netzwerkverbindung prüfen |
Hi Dieter Ich hab grad mal ins Handbuch reingeschaut. Unter GetLocalIP und GetLocalPort gibt es noch das @item #NETWORKUDP: Abfrage des lokalen Ports eines UDP-Objekts, ... und da gibt es noch @item OnReceiveUDPData: Die hier angegebene Funktion wird jedes Mal aufgerufen, wenn neue Daten von einer vorhandenen UDP-Verbindung empfangen wurden. Die Funktion wird eine Nachricht als Parameter 1 mit den folgenden Feldern übergeben: ... Und als Fehler sollte da eigendlich kommen: @item #ERR_FINDUDPOBJECT Konnte UDP-Objekt %ld nicht finden! (1429) Wenn ich das Handbuch so richtig interpretiere. Hoffe das hilft dir ein bischen weiter. |
Autor: | DieterG [ 12 Apr 2018, 18:53 ] |
Betreff des Beitrags: | Re: UDP Netzwerkverbindung prüfen |
Das locale port ist in dem Fall uninteressant und das remoteport kann ich eben nicht abfragen. Zum zweiten Punkt, das ist ja soweit dasselbe wie receiveudpdata nur als message, daher ist dort das problem dasselbe, wenn Hollywood das Objekt einfach schliesst. Werde das aber mal testen. Ich denke das noch niemand mit dieser function von Hollywood gearbeitet hat und das ein Fehler ist da bei einem udp Protokoll kein timeout oder irgendwas die Verbindung automatisch schliesst. |
Autor: | DieterG [ 17 Apr 2018, 19:20 ] |
Betreff des Beitrags: | Re: UDP Netzwerkverbindung prüfen |
Habe das getestet und läuft soweit. Was heisst das Programm beendet sich zumindest nicht weil ich ja nur dann daren abhole wenn welche ankommen. Ist natürlich erheblich langsamer als vorher. Da ich auch nicht prüfen kann ob das udpObjekt geschlossen wurde oder noch offen ist, gehe ich einfach nach einer zeit ohnecdaten davon aus das es so ist. Scheinbar interessiert es openudpobjekt auch nicht ob das objekt mit der id schon offen ist, genauso wie es den closeudpobject nicht interessiert ob das Objekt offen war. Gut soweit sind meine Tests mit Hollywood als erfolgreiche einzustufen. Nun würde mich natürlich interessieren wie groß die executables denn würden. Da ich zum testen die trialversion benutzt habe. Sollten diese im Rahmen sein würde ich mir Hollywood ernsthaft zulegen um damit sinnvolles zu proggen. Kann das nal jemand comilieren und mir die grösse der dateien für die diversen betriebssysteme durchgeben ? Noch eine Frage: kann externer Code eingebettet werden ? Z. B. Assembler oder c- objectcode ( ist dann natürlich nicht mehr Betriebssystemneutral) ? |
Autor: | Tipsi [ 18 Apr 2018, 10:45 ] |
Betreff des Beitrags: | Re: UDP Netzwerkverbindung prüfen |
Salli DieterG Schön, dass Du ein Programm erstellt hast. Du kannst Dein Script an handbuch @ gmx .ch schicken. Dann kann ich mal die ganze Sache compilieren und Dir mitteilen, wie gross die Dateien werden. Allerdings habe ein wenig Geduld, denn in ein paar Minuten darf ich in den "Stollen" gehen. Das einbetten von externem Code wie C, Pascal, Basic, Assembler etc. sowie der Zugriff auf extene Bibliotheken ist mit Hollywood nicht möglich. Ob es möglich ist, die Plugin-Schnittstelle für so etwas zu "missbrauchen"? Keine Ahnung. Falls Du Dich entschliesst, Hollywood zuzulegen, dann hast Du die Möglichkeit, Andreas Deine Wünsche und Verbesserungsvorschläge zukommen zu lassen. Vielleicht kann er dann etwas einbauen, damit Du z.B. überprüfen kannst, ob das udpObjekt geschlossen wurde oder nicht. So, jetzt muss ich. Griessli Tipsi |
Autor: | DieterG [ 18 Apr 2018, 13:40 ] |
Betreff des Beitrags: | Re: UDP Netzwerkverbindung prüfen |
Werde das gleich mal senden. Würde es auch hier hochladen, da ich Anfänger in Hollywood programmieren bin würde mich interessieren ob jemand noch Verbesserungen oder schönere lösungen hat. Also ob die Art wie ich das Programm gemacht habe ein guter oder schlechter Stil ist usw. Gibt es fie Möglichkeit? |
Autor: | Tipsi [ 18 Apr 2018, 21:30 ] |
Betreff des Beitrags: | Re: UDP Netzwerkverbindung prüfen |
Salli DieterG Ich wollte gerade meinen Amiga starten und Dein Programm compilieren, als ich feststellte, dass noch nichts angekommen ist. Entweder hast Du es noch nicht abgeschickt, es macht gerade einen Umweg über Grönland oder es ist irgendwo im Netz verschwunden. Hhm, Codes wurden bis jetzt direkt in den Thread geschrieben. Du musst einfach zuerst oben den Knopf "Code" drücken (zwischen "Quote" und "List") und anschliessend Deinen Code dazwischen einfügen. Wie und wo man den code als Datei hochladen kann, muss Dir HelmutH erklären. Es ist grundsätzlich möglich, aber unter welchem Bereich kann ich Dir nicht sagen. Griessli Tipsi |
Autor: | DieterG [ 19 Apr 2018, 08:22 ] |
Betreff des Beitrags: | Re: UDP Netzwerkverbindung prüfen |
Code: Alles auswählen /**************************************************************** ** ** ** Name: DieterConn ** ** Author: Dieter Groppé ** ** Version: 0.6 ** ** Date: 11.04.18 ** ** Interpreter: Hollywood 7.1 ** ** Licence: Nothing, only Testtool ** ** Function: Try some TCP and UDP connections with Hollywood** ** and some gui functions ** ** ** ** History: ** ** ** ** 0.1: (19.03.18) ** ** - first try to get anything and show it ** ** 0.2: (20.03.18-04.04.18) ** ** - try a little with TFTP, get my file per tftp only trivial ** ** 0.3: (05.04.18-09.04.18) ** ** - add a GUI for parameters and outputs ** ** 0.4: (11.18-11.04.18) ** ** - some finetunig in GUI and program ** ** - add blockchecking (for bad tftp-server implementation) ** ** 0.6: (17.04.18-17.04.18) ** ** - rewrite to get receiveudpmsg ** ** ** ****************************************************************/ @VERSION 5,0 @APPTITLE "DieterConn" data$ = "gez.txt\0" savename$="" .. data$ ipadress$ = "127.0.0.1" /*"192.168.1.111"*/ RRQ = 1 WRQ = 2 ACK = 4 Null$ = "\0" Ackn$ = Null$ .. ByteChr(ACK) TFTPMODE$ = "NETASCII\0" TFTPrequest$ = Null$ .. ByteChr(RRQ) .. data$ .. TFTPMODE$ button$ = {} blockis = Nil open = False @MENU 1, { {"File", { {"Get TFTP file...", ID = "get", Hotkey = "G"}, {"Save file...", ID = "save", Hotkey = "S"}, {"Quit", ID = "quit", Hotkey = "Q"}}}, {"?", { {"About...", ID = "about"}}} } @DISPLAY {Menu = 1, Title = "DieterConn", COLOR=$cFcFcF} Function printstatus() DebugPrint (temp$) SetFillStyle(#FILLCOLOR) Box(10, 450, 600, 20, $CfCfCf) TextOut (10, 450, temp$) /*CreateTextObject(1, temp$) DisplayTextObject(1, 10,250) FreeTextObject(1)*/ /*Locate (10,250) Print (temp$)*/ EndFunction Function NetConn() a$ = "" CreateUDPObject(1) open = True DebugPrint ( "Ipadress vorher =", ipadress$) ;ipadress$ = ToIP(ipadress$) PRODUZIERT nur FEHLER ! DebugPrint ( "Ipadress nachher =", ipadress$) SendUDPData(1, TFTPrequest$, ipadress$ , 69) DebugPrint ( Ackn$ , MidStr(trans$,2,2,#ENCODING_RAW) ,"Ipadress=", ipadress$ ,"port:", portnr) EndFunction Function closeconn() CloseUDPObject(1) open = False trans$="" blockis = Nil printstatus EndFunction Function SaveFile() OpenFile(1, savename$, #MODE_WRITE ) WriteString(1, a$ , 0, #ENCODING_RAW) CloseFile(1) EndFunction Function MakeGagdet(typ,xc,yc,br,wi,Text$) ID = MakeButton(Nil, #SIMPLEBUTTON, xc, yc, br, wi, buttonevents) button$[ID] = LeftStr(Text$ .. " ",4) Box(xc, yc, br, wi, #BLACK) Box(xc+1, yc+1, br, wi, #WHITE) If typ = 2 Then yc = yc - 20 TextOut(xc+2, yc+5, Text$) EndFunction Function setfilename() DebugPrint (savename$) If StrLen(savename$) <> 0 SetFillStyle(#FILLCOLOR) Box(12, fny+6, 346, 19, $CfCfCf) TextOut(12, fny+6, savename$) EndIf EndFunction Function setipadress() DebugPrint (ipadress$) If StrLen(ipadress$) <> 0 SetFillStyle(#FILLCOLOR) Box(12, ipy+5, 346, 19, $CfCfCf) TextOut(12, ipy+5, ipadress$) EndIf EndFunction Function setdata() DebugPrint (data$) If StrLen(data$) <> 0 SetFillStyle(#FILLCOLOR) Box(12, day+4, 346, 19, $CfCfCf) TextOut(12, day+4, data$) EndIf EndFunction /* ** Event callback that handles menu selections */ Function p_Receive(msg) If blockis=Nil Then blockis=$0001 trans$, ipadress2$, portnr = ReceiveUDPData(1) If portnr <> Nil DebugPrint ( Ackn$ , MidStr(trans$,2,2,#ENCODING_RAW) ,"Ipadress=", ipadress2$ ,"port:", portnr) blockget=ByteAsc(MidStr(trans$,2,1,#ENCODING_RAW))*256+ByteAsc(MidStr(trans$,3,1,#ENCODING_RAW)) If (trans$<>"" And blockget = blockis) SendUDPData(1, Ackn$ .. MidStr(trans$,2,2,#ENCODING_RAW) , ipadress2$ , portnr) a$ = a$ .. MidStr(trans$,4,-1,#ENCODING_RAW ) blockis = blockis + 1 temp$="Anzahl Bytes/Block: " .. StrLen(trans$,#ENCODING_RAW) .. " akt.Block: " .. blockget .. " Insgesamt Bytes: " .. StrLen(a$,#ENCODING_RAW) printstatus EndIf EndIf If StrLen(trans$,#ENCODING_RAW) < 516 CloseUDPObject(1) trans$="" blockis = Nil printstatus EndIf EndFunction Function p_MenuFunc(msg) Switch msg.action Case "OnMenuSelect": Switch msg.item Case "file": SaveFile Case "get": NetConn Case "quit": End Case "about" SystemRequest("Netzwerktests in Hollywood", "Netzwerktests in Hollywood", "O.K.") EndSwitch EndSwitch EndFunction Function p_ButtonFunc(msg) DebugPrint ("Button Pressed !") Switch button$[msg.id] Case "Serv" in$ = StringRequest("Server", "IP-Adress or Hostname" , ipadress$ ) If in$<>"" Then ipadress$ = in$ setipadress Case "Remo" in$ = StringRequest("Remotefile", "only the file to get" , data$ ) If in$<>"" Then data$ = in$ setdata Case "GET " NetConn Case "File" savename$=StringRequest("Savefile", "The complete filename (with path)" , savename$ ) If in$<>"" Then savename$ = in$ setfilename Case "... " savename$ = FileRequest("Select a file") setfilename Case "Save" SaveFile EndSwitch EndFunction SetFontColor(#BLACK) SetFont("Arial", 16) ;Make the Buttons and GUI buttonevents = {OnMouseUp = p_ButtonFunc, OnRightMouseUp = p_ButtonFunc} ipy=35 day=80 MakeGagdet(2, 10, ipy, 350, 30,"Server") MakeGagdet(2, 10, day, 350, 30,"Remotefile") MakeGagdet(1, 10, 115, 80, 30,"GET") SetFillStyle(#FILLNONE) Box(5, 5, 380, 145, #GREEN) TextOut(10,6,"[b][u]REMOTE[b][u]",{COLOR = #GREEN}) setipadress setdata SetFillStyle(#FILLNONE) fny=190 MakeGagdet(2, 10,fny ,350, 30,"Filename:") MakeGagdet(1, 10, 230, 30, 30,"...") MakeGagdet(1, 10, 270, 80, 30,"Save") setfilename SetFillStyle(#FILLNONE) Box(5, 155, 380, 160, #BLUE) col=COLOR=$000000FF TextOut(10,155,"[b][u]LOCAL[b][u]",{COLOR = #BLUE}) InstallEventHandler({OnMenuSelect = p_MenuFunc,OnReceiveUDPData = p_Receive}) ; endless loop Repeat WaitEvent Forever |
Autor: | Tipsi [ 19 Apr 2018, 11:21 ] |
Betreff des Beitrags: | Re: UDP Netzwerkverbindung prüfen |
Salli DieterG Ich hab mal Dein Script compiliert und folgende Grössen kamen dabei raus: Code: Alles auswählen Amiga-68k: 2351 KB Amiga-68k-FPU: 2288 KB AmigaOS4: 3275 KB AROS: 2961 KB MorphOS: 2528 KB WarpOS: 3204 KB Linux-ARM: 2531 KB Linux-PPC: 2939 KB Linux-x64: 3111 KB Linux-x86: 2563 KB MacOS-PPC: 2387 KB MacOS-x64: 3518 KB MacOS-x86: 3375 KB Windows-x64: 3096 KB Windows-x86: 2506 KB Applet: 10 KB ist nur folgendes aufgefallen: Um Fettschrift und Unterstrichen im Text aufzuheben musst Du [/b] und [/u] setzten. Ist bei Dir nicht schlimm, da Du ja nur ein Wort in der Zeichenkette hast. Hättest Du mehrere Wörter benutzt, wären alle nach dem zweiten weiterhin Fett und Unterstrichen. Es ist für Ausenstehnde angenehmer den Code zu lesen, wenn die von Dir erstellten Funktionen sich mit dem Namen irgendwie von den Hollywood-Befehlen abheben. Auch wenn sich einige Leute dagegen wehren, empfiehlt ja Andreas, vor dem Namen ein p_ zu setzen. p_setipadress() ist klar eine vom Programmierer erstellte Funktion. setipadress könnte auch SetIPAdress() sein und das sieht aus wie ein Befehl von Hollywood. Und es muss nicht unbedingt p_ sein. Es kann auch Franz_ MF_ (Meine Funktion) oder so sein. Man kann auch seine Funktionen in einer Tabelle verwalten. Z.B. Fabio hat die SCUI-Lib so erstellt. Die Funktionen heissen dann scui.Get(), scui.Set() usw. Da ist es auch klar, dass dies keine Hollywood-Befehle sind. Mehr konnte ich noch nicht genauer anschauen. Griessli Tipsi |
Autor: | DieterG [ 19 Apr 2018, 11:47 ] |
Betreff des Beitrags: | Re: UDP Netzwerkverbindung prüfen |
Den Tipp mit der Kennzeichnung eigener Funktionen nehme ich gerne an. Mit dem Schriftstyl habe ich dahinter falsch editiert, fehlt der backslash, gut aufgepasst Was mich aber echt wundert ist fud Größe der Programne. Kkar gatte ich erwartet das gegenüber Assembler oder c größerer Code entsteht, aber MB habe ich nicht erwartet. Scheinbar wird da viel reingecoded was garnicht gebraucht wird, was man auch daran sieht das die FPU Version kleiner ist obwohl ja garkeine fliesskomnaberechnungen oder ähnliches die die fpu nutzen verwendet werden. Also um faktor 10 kleiner wäre ok aber das sind ja Hammerteile. Warum ist dann das apk nur so klein ? Kannst du mal ohne den debugprint compilieren, ob das was ausmacht ? Ist eine option soweit ich gelesen habe. |
Autor: | Tipsi [ 19 Apr 2018, 21:51 ] |
Betreff des Beitrags: | Re: UDP Netzwerkverbindung prüfen |
Salli DieterG Naja, das ist der Hollywood-Player, der so gross ist. Darum ist das Applet auch so klein, da hier der Player fehlt. Aus diesem Grund hat Andreas auch angefangen, anstatt viele neue Befehle/Funktionen in Hollywood zu integrieren, diese als Plugin anzubieten. Die FPU-Version ist kleiner, da Hollywood diverse Matheaufgaben nicht selber lösen muss, da dies die FPU schon übernimmt. Darum ist der integrierte Hollywood-Player kleiner, nicht Dein Skript. Wenn ich ein Skript als Amiga-68k compiliere, wobei das Skript nur eine Zeile mit dem Kommentar ;Hallo hat, ist das Programm immer noch 2342 KB gross. Darum wirkt sich auch das Löschen der Zeilen mit DebugPrint eigentlich nicht aus: Amiga-68k: 2350 KB (ohne) statt 2351 KB (mit Debugprint). Griessli Tipsi |
Autor: | HelmutH [ 20 Apr 2018, 10:27 ] |
Betreff des Beitrags: | Re: UDP Netzwerkverbindung prüfen |
Hi Dieter Super Hast ja eine Lösung gefunden um es ans laufen zu bekommen. Auch wenn es vielleicht noch nicht so ist wie du dir das vorstellst, aber zumindest beendet es nicht das laufende Skript. Ich würde es auch gerne ausprobieren, leider ist mir aber mein AOne verreckt, sodas ich im Moment ohne Amiga da nicht mitmachen kann. Das hochladen von Hollywood Dateien kannst du unter Downloads Hollywood Programme und dann rechts oben auf "Eine Datei hochladen". |
Autor: | DieterG [ 20 Apr 2018, 16:20 ] |
Betreff des Beitrags: | Re: UDP Netzwerkverbindung prüfen |
Das ist natürlich erschreckend. Verstehe ich aber nicht ganz. Hollywood compiliert die scriptsprache in ein binäres Programm, wozu dann noch den Hollywoodplayer da rein compilieren ? Das sieht eher so aus als würde garnicht compiliert sondern nur das script mit dem player verbunden gespeichert damit dieser das in Laufzeit abarbeitet( aldo interpretiert) Damit wäre es aber kein compilieren im eigentlichem Sinn sondern es wäre weiterhin eine Interpretersprache, der nur eben den Interpreter mitbringt. Das wird aber anders beworben ? Ich glaube damit ist Hollywood eher für große statt kleine Projekte geeignet. Das ich frage mich auch, inwieweit Betriebssystem updates dann den Interpreter beeinflussen können. Sicher auch ein Thema. Zumindest verstehe ich jetzt warum bei Hollywood Programmen die Systemanforderungen so hoch sind, ich dachte immer die wären einfach schlecht programmiert. Nungut, dann hat c doch viele vorteile, vor allem echte binärecodes. Wenn da nur nicht diese nervigen variabeltypen wären. Gibts FreeBasic nicht auch für Amiga ? Wäre dann auch eine Option, der hat auch echte compiler und gibts für fast alle Plattformen. Ich überlege mir das mal mit Hollywood, ich fands gut das es die Möglichkeit mit der trialversion gab um das mal anzutesten. |
Autor: | Tipsi [ 21 Apr 2018, 12:48 ] |
Betreff des Beitrags: | UDP Netzwerkverbindung prüfen |
Salli Dieter > Im Moment bricht der ToIp immer das Programm ab, so das ich auch nicht testen > kann was er denn machen würde wenn er funktioniert. Einzig 127.0.0.1 belässt er > so, alles andere geht nicht. Hollywood bietet die Möglichkeit, statt bei einem Fehler das Programm abzubrechen, den Fehler abzufangen und auszuwerten. Wenn in Deinem Fall ToIP() einen Fehler erzeugt, kannst Du den Aufruf so schreiben (mit Fragezeichen): Code: Alles auswählen Errorcode, ipadress$ = ?ToIP(ipadress$) If ErrorCode<>0 ;bei 0 ist alles in Ordnung Weiter = SystemRequest("Fehler ToIP", "Errorcode: "..ErrorCode..Char(10).."ipadress$: "..ipadress$, "OK") Else ;Hier der Code, wenn alles in Ordung ist oder Else-Block weglassen EndIf werden muss: ..Char(10)..Char(12).. ---- Solange das Programm nicht "compiliert" ist, wird das Script via Interpreter abgespielt. Beim Compilieren wird zwar das Script in Bytecode umgewandelt, aber mit dem Player verbunden. Du hast auch die Möglichkeit, nur Applets zu erstellen. Dann müssen, wenn Du es allen zur Verfügung stellst, die Benutzer den Hollywood-Player von der Hompage herunterladen und installieren. So bleiben die Applets klein und du musst nicht für jede Plattform ein Programm compilieren. ---- Es gibt irgendeine Programmiersprache, die anscheinend auch recht gut zu handhaben ist und auch auf fast allen Plattformen erhältlich ist. Aber das Dumme ist eben, dass dies irgendwo im Kommentarbereich von Amiga-News geschrieben wurde. Vielleicht finde ich es noch. ---- > Das ich frage mich auch, inwieweit Betriebssystem updates dann den Interpreter beeinflussen können. > Sicher auch ein Thema. Hielt sich bis jetzt ziemlich in Grenzen. Es gab ein zwei Befehle, die bei Windows 10 zickten. Mehr nicht. Oft werden Betriebssystem-Eigenschaften geändert, die Hollywood eh nicht betreffen. Und ich nehme an, dass Andreas sich stark an die jeweiligen Richtlinien der Betriebssysteme hält, damit er seine Ressourcen für neue Funktionen und Plugins einsetzen kann. ---- Schön, dass Du Dich mit Hollywood auseinandergesetzt hast, auch wenn wahrscheinlich eher C oder so für Dich in Frage kommt. Hollywood entwickelt sich ja weiter und abgesehen von der Grösse der compilierten Programme kommen immer wieder neue Funktionen dazu und alte werden falls nötig verbessert. ---- Ich habe einen Kommentarbereich gefunden. Ich dachte, dass dort mehr darüber diskutiert wurde. Kann sein, dass dies der falsche ist. Aber schau mal ab Post Nr. 7 nach: http://www.amiga-news.de/de/news/commen ... 40-DE.html Es ist allerdings von Lazarus und Freepascal die rede. Griessli Tipsi |
Seite 1 von 1 | Alle Zeiten sind UTC |
Powered by phpBB® Forum Software © phpBB Limited Deutsche Übersetzung durch phpBB.de |