amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Progamm<->Internet<->Programm [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- 2 3 4 [ - Beitrag schreiben - ]

04.08.2006, 20:47 Uhr

Ralf27
Posts: 2779
Nutzer
Ich versuch mal ganz vorsichtig zu fragen: :D

Ich kann bereits eigene Programm über das locale Netzwerk indirekt verbinden, indem ich einfach auf eine zentrale Datei im Netzwerk zugreifen lasse. Aber das wahre ist das natürlich nicht. I-)

Wenn ich aber jetzt das ganze aber über TCPIP machen möchte, wie kann ich da vorgehn? Gibt es da eine Lib oder dergleichen mit dem das einfach(!) und für normalsterbliche(!) machbar ist? I-) :D

Also so auf die Art: geb mir IP und ich verbind dich (mit einem internen Port auf der IP). Also sowas wie Client/Server.

Ich hoffe ich habe mich irgendwie verständlich ausgedrückt. :)
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

04.08.2006, 21:06 Uhr

ZeroG
Posts: 1486
Nutzer
@Ralf27:

TCP/IP geht über die bsdsocket.library.
Ob das was für "normalsterbliche" ist weiß ich net.

[ - Antworten - Zitieren - Direktlink - ]

04.08.2006, 21:09 Uhr

Gerry
Posts: 82
Nutzer
entweder über die socket-libraries, aber auch die AMarquee.library (Aminet) ist eine sehr einfache Library, mit der man Online-Programme(Client, Server, somit z.B. Internetspiele usw.) Programmieren kann, ohne großen Aufwand.

[ - Antworten - Zitieren - Direktlink - ]

04.08.2006, 21:12 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von Gerry:
entweder über die socket-libraries, aber auch die AMarquee.library (Aminet) ist eine sehr einfache Library, mit der man Online-Programme(Client, Server, somit z.B. Internetspiele usw.) Programmieren kann, ohne großen Aufwand.


Danke, das ist mal ein Wort. Ich schau mir die Lib gleich mal an. :)
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

04.08.2006, 21:46 Uhr

Ralf27
Posts: 2779
Nutzer
hm, komplex. Wird wohl etwas dauern bis ich das intus habe...
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

04.08.2006, 21:47 Uhr

Gerry
Posts: 82
Nutzer
Es sieht am Anfang komplex aus. Aber wenn man mal sein Grundgerüst hat, dann ists einfach.

[ - Antworten - Zitieren - Direktlink - ]

04.08.2006, 22:48 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von Gerry:
Es sieht am Anfang komplex aus. Aber wenn man mal sein Grundgerüst hat, dann ists einfach.


Hab es eben etwas überflogen. Aber ich hab leider wie immer die folgenden Probleme:

* kann kein Englisch (ok, inzwischen doch ein wenig... :) )
* nur Basic (ok, ich versteh inzwischen C besser als blitz ... :nuke: )
* haben sich gerade einige Gehirnzellen etwas verwirrt bei der Lib, obwohl sie auf dem ersten Blick verständlich zu sein scheint, sind es doch recht viele Befehle/Möglichkeiten.

Ich gehe einfach mal davon aus das es keine deutschen Infos zur Programmierung dieser lib in Basic gibt... :lach:

Vermutlich bekomme ich das hier und da durch etwas Trail&Error hin, bzw. werd ich da vermutlich auch recht viel Hilfe hier aus dem Forum benötigen, so wie es auch bei den Datatypes war, die für mich ähnlich verwirrend waren bzw. teilweise als noch sind... :shock2: :lach:
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

05.08.2006, 13:50 Uhr

thomas
Posts: 7675
Nutzer

Du kannst auch mit dem TCP-Handler eine einfache Verbindung herstellen. Voraussetzung ist nur, daß TCP: angemeldet ist.

Hier sind zwei ARexx-Programme, die das demonstrieren:

code:
/* rexx */

say "Öffne Verbindung"
if Open(tcp,"tcp:9999",read) then do
 say "Verbindung geöffnet."
 say "Warte auf Daten."
 zeile = ReadLn(tcp)
 say "Empfangen:" zeile
 say "Schließe Verbindung."
 call Close(tcp)
 say "Verbindung beendet."
end
else
 say "Verbindung fehlgeschlagen."


code:
/* rexx */

say "Öffne Verbindung"
if Open(tcp,"tcp:localhost/9999",write) then do
 say "Verbindung geöffnet."
 say "Sende Daten."
 call WriteLn tcp,"Hello World !"
 say "Schließe Verbindung."
 call Close(tcp)
 say "Verbindung beendet."
end
else
 say "Verbindung fehlgeschlagen."


Gruß Thomas


--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

05.08.2006, 16:39 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von thomas:

Du kannst auch mit dem TCP-Handler eine einfache Verbindung herstellen. Voraussetzung ist nur, daß TCP: angemeldet ist.


Das sieht ja wirklich recht einfach aus. Also TCP ist ein Handler, kann ich also vermutlich mit Open() nicht öffnen. Hab eben auch ein paar kleine Versuche mit dem Basicbefehl OPEN gemacht, damit geht es aber wohl nicht. Der Dosbefehl Open dürfte wohl genauso nicht gehn, da es ja keine Datei ist.
Da muß ich wohl auf die Ebene der Handler absteigen. Gibt es dafür eventuell ein kleines C-Beispiel für diesen Handler?
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

05.08.2006, 17:08 Uhr

thomas
Posts: 7675
Nutzer

Alles falsch. TCP: *ist* eine Datei, die du mit Open öffnen kannst, genau wie CON: oder PRT: o.ä.

Der Dateiname ist entweder

TCP:port

oder

TCP:ip-adresse/port


Im ersten Fall wird ein Listener erzeugt, d.h. die Task wartet darauf, daß jemand von außen auf diesen Port zugreift. Der zweite Fall ist genau so ein Zugriff, bei dem auf den Port eines anderen Rechners zugegriffen wird.

Im Beispiel ist die IP-Adresse "localhost", also der eigene Rechner, das Beispiel so gedacht, daß beide Rexxe auf dem gleichen Rechner laufen. Falls die erste Rexx auf einem anderen Rechner läuft, muß in der zweiten Rexx entsprechend die IP-Adresse des anderen Rechners eingetragen werden.

Falls du Genesis benutzt, mußt du darauf achten, daß der Port in der Access- bzw. Zugriffsliste freigegeben ist.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

06.08.2006, 14:20 Uhr

Ralf27
Posts: 2779
Nutzer
Hm, da ein Fehler beim öffnen auftrit hab ich wohl was falsch gemacht. Also, TCP: gibt es, mit Assign kann ich dieses sehn und bei mir läuft Genesis. Muß ich auch wenn ich diesen Test auf dem gleichen Rechner mach eventuell Ports freischalten?
Ich steh da eh etwas auf dem Kriegsfuß mit TCPIP...

Fragt sich nur wie eintragen: Also bei "Dienste" und "Zugriff".

Dienste:
Testport, 9999,

Zugriff:
Äh, gute Frage, wie genau? Alle Rechner laufen hier mit 192.168.123.*, also:

TestPort, 192,168,123,*, erlauben, log

?

Und wenn das über das ganze netz gehen soll dann mit *.*.*.* ?


Das ganze hab ich mir eben gerade "theoretisch zusammenüberlegt", bin mir aber ehrlich nicht sicher ob das so hinkommt.

Und wegen denn Programmen:
Einfaches open() mit der Dos-Funktion reicht? Unheimlich einfach, jetzt muß es nur noch laufen! :D Was geb ich denn als modus an? Gibt es da ne vorgabe? Und, muß dann wirklich der ganze Prozess warten bis da Daten bereit liegen?
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

06.08.2006, 15:41 Uhr

thomas
Posts: 7675
Nutzer

Du brauchst keinen neuen Dienst zu definieren. Trag einfach die Zeile

9999 *.*.*.* allow

an den Anfang der Datei amitcp:db/inet.access ein. Wichtig ist, daß sie vor der Zeile mit "deny" steht, weil sie sonst nicht funktioniert.

Zitat:
Einfaches open() mit der Dos-Funktion reicht?

Natürlich funktioniert es einfach mit DOS-Funktionen, das ist der Sinn eines Handlers.

Zitat:
Was geb ich denn als modus an? Gibt es da ne vorgabe?

Keine Ahnung. Ist wahrscheinlich wie bei CON:, da streiten sich auch die Gelehrten.

Zitat:
Und, muß dann wirklich der ganze Prozess warten bis da Daten bereit liegen?

Yep. Dafür ist es einfach.

Du kannst natürlich asynchrones I/O machen, aber das wäre dann doch etwas über das Ziel hinausgeschossen. Dann solltest du lieber direkt die bsdsocket.library benutzen, das ist auch nicht komplizierter.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

06.08.2006, 16:59 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von thomas:

Du brauchst keinen neuen Dienst zu definieren. Trag einfach die Zeile

9999 *.*.*.* allow

an den Anfang der Datei amitcp:db/inet.access ein. Wichtig ist, daß sie vor der Zeile mit "deny" steht, weil sie sonst nicht funktioniert.
Zitat:
Zur Zeit sieht meine so aus:
code:
## This file was generated by GENESiSPrefs GenesisPrefsRA 45.6
##
netbios-dgm     127.0.0.1            allow LOG
netbios-dgm     192.168.123.*        allow LOG
swat            127.0.0.1            allow LOG
swat            192.168.123.*        allow LOG
netbios-ssn     127.0.0.1            allow LOG
netbios-ssn     192.168.123.*        allow LOG
finger          127.0.0.1            allow LOG
ident           *.*.*.*              allow LOG
$               *.*.*.*              allow LOG
*               $                    allow LOG
http            192.168.123.*        allow LOG
http            127.0.0.1            allow LOG
9999            *.*.*.*              allow LOG


Ich hab also kein Deny. Es müßte also so laufen?

Natürlich funktioniert es einfach mit DOS-Funktionen, das ist der Sinn eines Handlers.
Ich hab mal die beiden folgenden Programme in Basic geschrieben. Der Sender hängt sich auf und der Empfänger meldet einen Fehler.

Sender:
code:
tcp&=xOpen&(SADD("TCP:9999"+CHR$(0)),MODE_NEWFILE&)
IF tcp& THEN
 junk&=xWrite&(tcp&,SADD("TEST"),4)
 junk&=xClose&(tcp&)
ELSE
 PRINT"Fehler"
END IF


Empfänger:
code:
tcp&=xOpen&(SADD("TCP:9999"+CHR$(0)),MODE_OLDFILE&)
a$="1234"
IF tcp& THEN
 junk&=xRead&(tcp&,SADD(a$),4)
 PRINT a$
 junk&=xClose!(tcp&)
ELSE
 PRINT"Fehler"
END IF

(Bitte gerade in der Hinsicht der Speicheranforderung etwas nachsicht walten lassen. :D )
Ich hab mal die Includes herraus gelassen.

Achja, es läuft leider auch nicht mit TCP:localhost/9999

Aber vermutlich hab ich irgendwo wieder einen dummen kleinen Fehler drin. I-) :lach:
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

06.08.2006, 18:10 Uhr

thomas
Posts: 7675
Nutzer
Zitat:
Ich hab also kein Deny. Es müßte also so laufen?

Du hast eh alle Ports freigegeben, da brauchst du den Eintrag gar nicht. Allerdings habe ich starke Zweifel, ob du der deutschen Sprache mächtig bist. Wenn ich Anfang schreibe, dann meine ich auch Anfang und nicht Ende.

Zitat:
Ich hab mal die beiden folgenden Programme in Basic geschrieben. Der Sender hängt sich auf und der Empfänger meldet einen Fehler.

Du solltest dir mal ein paar Gedanken über Netzwerktechnik machen...

Was glaubst du, woran der Handler einen Sender von einem Empfänger unterscheiden kann, wenn er nur den Dateinamen zur Verfügung hat ?

Du hast zwei Empfänger programmiert. Der erste öffnet den Port und wartet, bis jemand sich meldet. Der hat sich nicht aufgehängt.

Der zweite geht dann kaputt, weil auf einem Port immer nur ein Programm lauschen kann.

Ist das denn wirklich so schwer ? Mach einfach zwei Shell-Fenster auf. In dem einen gibst du ein:

type tcp:9999

und in dem anderen

copy s:startup-sequence tcp:localhost/9999

(natürlich mußt du vorher deine Basic-Gehversuche beenden).

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

06.08.2006, 18:49 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von thomas:
Du hast eh alle Ports freigegeben, da brauchst du den Eintrag gar nicht. Allerdings habe ich starke Zweifel, ob du der deutschen Sprache mächtig bist. Wenn ich Anfang schreibe, dann meine ich auch Anfang und nicht Ende.

Du hast geschrieben das es auf jedem Fall *vor* einem deny stehn muß, was ja auch der Fall ist. *Deswegen* das mit dem ganz am Anfang sehn.
Du mußt nicht gleich beleidigend werden.
Zitat:
Du solltest dir mal ein paar Gedanken über Netzwerktechnik machen...

Was glaubst du, woran der Handler einen Sender von einem Empfänger unterscheiden kann, wenn er nur den Dateinamen zur Verfügung hat ?

Du hast zwei Empfänger programmiert. Der erste öffnet den Port und wartet, bis jemand sich meldet. Der hat sich nicht aufgehängt.

Der zweite geht dann kaputt, weil auf einem Port immer nur ein Programm lauschen kann.

Ist das denn wirklich so schwer ? Mach einfach zwei Shell-Fenster auf. In dem einen gibst du ein:

type tcp:9999

und in dem anderen

copy s:startup-sequence tcp:localhost/9999


Sorry, aber das erklärt es einfach nicht. Vielleicht hab ich es da oben etwas falsch dargestellt. Aber nochmal:

Der Empfänger startet und wartet. Der Sender meldet ein Fehler.
Wo bitte hab ich zwei Sender gebaut? Beide sollten doch auf dem gleichen Port laufen, sonst kommen diese ja wohl nicht zusammen.

Also, wieso soll dann der Sender nur ein Empfänger sein? Ich versuch doch auf dem Sender was mit Write zu schreiben.


Moment, also der *Name* macht dann denn unterschied? Ist Localhost beim Sender (EDIT: Sender, nicht Empfänger...) also doch zwingen notwenig? Also die IP?

Jo, dann läufts...



Kurz nochmal was anders:
Ich bin dir immer sehr dankbar für deine Hilfe und ohne dich würde ich vermutlich auch seit Jahren nix mehr programmieren. Aber leider hab ich nicht denn totalen Durchblick bei einem Problem... meingott, deswegen hab ich ja ein Problem und suche hier nach Hilfe. Deswegen brauch ich öfters mal mehr Infos, aber weniger Beleidigungen...
--
http://www.alternativercomputerclub.de.vu

[ Dieser Beitrag wurde von Ralf27 am 06.08.2006 um 18:51 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

06.08.2006, 19:45 Uhr

thomas
Posts: 7675
Nutzer

Wenn du einen Namen der Form TCP:port benutzt, dann wird daraus ein Listener, d.h. ein Server, der auf diesem Rechner sitzt und auf dem Port auf Anfragen wartet. Davon kann es immer nur einen geben.

Ein Name der Form TCP:ip-adresse/port ist ein Client, d.h. es wird eine Anfrage an den Rechner mit der IP-Adresse geschickt, und zwar an das Programm, das auf dem Port lauscht.

Klar muß der Server zuerst gestartet werden, denn er wartet auf die Verbindung, während der Client anschließend versucht, die Verbindung zum Server aufzubauen.

Wer hier Sender und Empfänger ist, ist unerheblich. Wenn die Verbindung erstmal steht, können Daten in beide Richtungen ausgetauscht werden. Ich habe nur deine Begriffe benutzt, um es verständlich zu machen.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

06.08.2006, 20:00 Uhr

Ralf27
Posts: 2779
Nutzer
Danke, jetzt bin ich da fast wunschlos Glücklich bis auf eine Kleinigkeit, das Open() beim Empfangen so lange wartet bis was ankommt, bzw. das das ganze Programm einfach steht. Hab da eben ein paar experimente gemacht, aber leider...

Mir ist schon klar was du weiter oben getippt hast, das es bei dem tcp-handler nunmal leider so ist. Bzw. das ich weiter einsteigen müßte... Ohoh :glow: :lach:
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

06.08.2006, 20:29 Uhr

Ralf27
Posts: 2779
Nutzer
Hm, hab da ne Idee wie ich dieses Problem auch "lösen" könnte, allerdings nicht so ganz auf die elegante Weise. Bzw. wären dann neue Möglichkeiten offen, allerdings auch etwas mehr Traffic als unbedingt notwenig...
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

06.08.2006, 23:20 Uhr

bubblebobble
Posts: 707
Nutzer
Versuch es doch mal "sauber" mit der bsdsocket.library.
Würde mich auch interessieren wie das genau geht.

Den TCP: assign gibt es z.b. unter WinUAE nicht, d.h. wenns nicht nur mit Genesis laufen soll, musst du schon fast bsdscocket.lib nehmen.


--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

06.08.2006, 23:24 Uhr

Reth
Posts: 1812
Nutzer
Zitat:
Original von Ralf27:
Hm, hab da ne Idee wie ich dieses Problem auch "lösen" könnte, allerdings nicht so ganz auf die elegante Weise. Bzw. wären dann neue Möglichkeiten offen, allerdings auch etwas mehr Traffic als unbedingt notwenig...


Lass mal hören!

[ - Antworten - Zitieren - Direktlink - ]

07.08.2006, 10:15 Uhr

thomas
Posts: 7675
Nutzer
Zitat:
Den TCP: assign gibt es z.b. unter WinUAE nicht, d.h. wenns nicht nur mit Genesis laufen soll, musst du schon fast bsdscocket.lib nehmen.

TCP: ist ein Device, kein Assign und natürlich gibt es das auch unter WinUAE, du mußt nur den INET-Handler installieren. Der ist z.B. bei AmiTCP oder Genesis dabei, gibt as aber glaube ich auch einzeln im Aminet.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

07.08.2006, 21:01 Uhr

Ralf27
Posts: 2779
Nutzer
Ok, aber da ist jetzt noch eine kleine Sache:

Server startet und wartet auf einem Rechner mit IP X auf Port 9999 auf Daten.
Der Sender auf einem anderen Rechner mit IP Y senden Daten zum Server (Rechner mit IP X).

Ok, jetzt können beide Rechner Daten in beide Richtungen austauschen.

Aber was ist wenn sich auf dem Server mehr als ein Client einloggen möchten? Bekommt dann jeder nachfolgende ein "Error" zurück?
Zur Not könnte ich ja auch anhand der Daten erkennen woher die Daten kommen, aber wenn TCP: dann vermutlich eh nur eine Verbindung zulässt... (mehrere Clients gleichzeitig auf verschiedenen Rechnern konnte ich halt nicht testen, sonst hätte ich die Antwort darauf selbst rausgefunden)

Und:
Kann ich irgendwie die IP des Senders auf dem Rechner des Servers rausbekommen, ohne das ich explizit die IP übertragen muß?
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

07.08.2006, 21:05 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von Reth:
Zitat:
Original von Ralf27:
Hm, hab da ne Idee wie ich dieses Problem auch "lösen" könnte, allerdings nicht so ganz auf die elegante Weise. Bzw. wären dann neue Möglichkeiten offen, allerdings auch etwas mehr Traffic als unbedingt notwenig...


Lass mal hören!


Ich drück es mal etwas einfach aus wie ich es mir in der Theorie ausgedacht habe: Pingpong, ca. 10 Packets pro Sekunde senden und empfangen. Hoffentlich würde das auch Real gehn.

Hab mal ein Test gemacht mit dem Senden und Empfangen von Packets über Dsl und hab mit meinem Amiga ca. 850Packets pro Sekunde.

Aber erst mal richtig testen ob es auch wirklich so läuft...
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

07.08.2006, 21:20 Uhr

thomas
Posts: 7675
Nutzer

Das ist nicht dein Ernst !

Oben hast du geschrieben, daß du nur zwei Programme im Netzwerk miteinander verbinden möchstest, das kannst du einfach mit TCP: machen.

Aber was du jetzt beschreibst, ist ein ausgewachsener Web-Server. Da solltest du schon die richtigen Mittel benutzen (bsdsocket.library) und nicht so eine Krücke verbocken.

Such mal bei Google nach Netzwerkprogrammierung. Es gibt tausende Beispiele und Erklärungen, auch in deutsch.

Ansonsten bliebe noch der Umweg über den inetd. Wenn du einen Eintrag im inetd für deinen Port machst, wird jedesmal, wenn ein Client eine Verbindung aufbauen möchte, das im Eintrag angegebene Programm aufgerufen. Dabei stehen die Daten vom Client in stdin und die Ausgabe wird einfach nach stdout geschrieben. Da für jede ankommende Verbindung eine neue Task aufgemacht wird, können beliebig viele Verbindungen parallel verarbeitet werden.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

07.08.2006, 21:40 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von thomas:
Das ist nicht dein Ernst !

Lies das nochmal und überleg dir mal was du schreibst.
Zitat:
Oben hast du geschrieben, daß du nur zwei Programme im Netzwerk miteinander verbinden möchstest, das kannst du einfach mit TCP: machen.
Hab ich nie oben geschrieben. Ich will nur mal die Möglichkeiten ausloten oder muß ich mich jetzt bei dir dafür entschuldigen? :dance3:

Locker bleiben! :D
Zitat:
Aber was du jetzt beschreibst, ist ein ausgewachsener Web-Server. Da solltest du schon die richtigen Mittel benutzen (bsdsocket.library) und nicht so eine Krücke verbocken.
Also, wenn *das* ein ausgewachsener Webserver sein soll...
Zitat:
Such mal bei Google nach Netzwerkprogrammierung. Es gibt tausende Beispiele und Erklärungen, auch in deutsch.

Ansonsten bliebe noch der Umweg über den inetd. Wenn du einen Eintrag im inetd für deinen Port machst, wird jedesmal, wenn ein Client eine Verbindung aufbauen möchte, das im Eintrag angegebene Programm aufgerufen. Dabei stehen die Daten vom Client in stdin und die Ausgabe wird einfach nach stdout geschrieben. Da für jede ankommende Verbindung eine neue Task aufgemacht wird, können beliebig viele Verbindungen parallel verarbeitet werden.



Es ging mir eigentlich mehr um die Struktur, um es mal einfach auszudrücken:
Rechner A <9999> Rechner B

wenn jetzt noch Rechner C und D dazu will, dann

Rechner A <9999> Rechner B <9998> Rechner C <9999> Rechner D

oder

Rechner A <9999> Rechner B
<9998> Rechner C
<9997> Rechner D

oder

ganz wild durcheinander I-)

der Knackpunkt:
es soll ein Datenpool aktuell gehalten werden. Im ersten Fall würde ich dann zwei Ports brauchen, im zweiten so viele wie Rechner rein wollen und Rechner A geht langsam in die Knie(theoretisch).

Zwischen zwei Rechnern wäre ich schon Happy und das geht ja jetzt auch. Die Krönung wäre halt, wenn man halt auch noch mehr Rechner daran Teil haben lassen könnte, *ohne* denn Aufwand zu erhöhen. Wenn es nicht geht, dann ist es auch ok.


Ich will hier kein Webserver, ein Browser oder sonst was programmieren!

So, und jetzt kannst du mich wieder in der Luft zerreisen. :D :lach:
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

09.08.2006, 11:09 Uhr

thomas
Posts: 7675
Nutzer

Also ich wollte dich weder angreifen, noch zerreißen. Ich möchte nur, daß du keine Krücke programmierst, nur weil du glaubst, der "richtig" Weg wäre zu kompliziert. Das ist er nicht.

Ich habe noch nicht verstanden, was du tun möchtest. Du schreibst weiter oben, daß du bisher mit einer Datei auf einer freigegebenen Festplatte arbeitest, die von allen Rechnern aktualisiert wird.

Wie möchtest du das jetzt ändern, möchtest du einen Server einrichten, der die Datei besitzt und von den anderen Rechnern Aktualisierungen zugeschickt bekommt ? Oder möchtest du die Datei auf allen Rechnern speichern und jeder, der eine Änderung vornimmt, schickt diese an alle anderen Rechner ?

Sollen alle Rechner gleichzeitig arbeiten (also mit mehreren Leuten), oder möchtest du nur quasi-gleichzeitig jeweils an einem Rechner arbeiten ? In letzterem Fall wäre TCP: durchaus zu gebrauchen, auch ohne unnötige Netzlast zu erzeugen.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

13.08.2006, 13:26 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von thomas:
Also ich wollte dich weder angreifen, noch zerreißen. Ich möchte nur, daß du keine Krücke programmierst, nur weil du glaubst, der "richtig" Weg wäre zu kompliziert. Das ist er nicht.

Ok, danke. Vielleicht hab ich da auch etwas überreagiert.
Zitat:
Ich habe noch nicht verstanden, was du tun möchtest. Du schreibst weiter oben, daß du bisher mit einer Datei auf einer freigegebenen Festplatte arbeitest, die von allen Rechnern aktualisiert wird.
Ja, das was ich da oben geschrieben habe war eine Notlösung, bzw. eine Krücke die zwar funktioniert, aber nicht das Gelbe vom Ei ist.
Zitat:
Wie möchtest du das jetzt ändern, möchtest du einen Server einrichten, der die Datei besitzt und von den anderen Rechnern Aktualisierungen zugeschickt bekommt ? Oder möchtest du die Datei auf allen Rechnern speichern und jeder, der eine Änderung vornimmt, schickt diese an alle anderen Rechner ?
Ich möchte von dieser "Dateilösung" weg kommen zu etwas "normalerem". Deswegen die Idee über Netzwerk "direkt".
Zitat:
Sollen alle Rechner gleichzeitig arbeiten (also mit mehreren Leuten), oder möchtest du nur quasi-gleichzeitig jeweils an einem Rechner arbeiten ? In letzterem Fall wäre TCP: durchaus zu gebrauchen, auch ohne unnötige Netzlast zu erzeugen.

Das verrückte an dem ganzen: Ich bin mir selbst nicht sicher wie weit ich gehn möchte bzw. kann.

Ich werd wohl am besten erst mal klein anfangen und über TCP: erst mal zwei Rechner miteinander verbinden.
Es geht eigentlich viel mehr darum ein Spiel Netzwerkfähig zu machen.

Ich hab vor kurzem auch ein kleines Beispiel von Dir gefunden, indem man via TCP: sogar eine Datei von einem Server laden kann. Ich hab auch gleich versucht das in Mbasic zu übersetzen. Leider bekomme ich da aber immer nur eine Fehlernummer mit "Bad Request" zurück. Ich vermute mal das es am "/n" von C liegt, das ich als Steuerzeichen ASCII 10 interpretiere, bzw. muß ich zwei mal ASCII 10 einsetzen, das ich ein Request vom server zurück bekomme.

Mal ein kleiner Beispielcode:
code:
a$=SPACE$(256)

tcp&=xOpen&(SADD("TCP:home.pages.at/80"+CHR$(0)),MODE_NEWFILE&)
IF tcp& THEN 
 b$="GET /a1260/EigenePage/Index2.htm HTTP/1.0"+CHR$(10)+CHR$(10)
 junk&=xWrite&(tcp&,SADD(b$),LEN(b$))
 junk&=xRead&(tcp&,SADD(a$),256)
 junk&=xClose&(tcp&)
 print a$
 print"end"
ELSE
 PRINT"Fehler"
END IF

Also, mir ist klar da ich so den Request vom Server nicht komplett auslesen kann, aber das was ich bis jetzt immer lese ist ein "Bad Request".
Also scheint die Anforderung falsch zu sein". Ich vermute einfach mal nur, das ich das "/n" falsch eingebaut habe. Hab auch schon einige Kombinationen mit ASCCI 13 und 10 versucht, was leider auch ins Nirvana verlaufen.
Aber vermutlich steh ich da jetzt auch mal wieder wie ein Ochs vom Berg und seh die Lösung einfach vor lauter Buchstaben nicht. :D

EDIT: Im obrigen Beispiel bekomme ich eine 301-Fehlermeldung zurück. Ich hab halt schon einige Server schon versucht, auch amiga-news. Aber meistens war es "Bad Request 4xx"

--
http://www.alternativercomputerclub.de.vu

[ Dieser Beitrag wurde von Ralf27 am 13.08.2006 um 13:32 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

13.08.2006, 13:44 Uhr

Reth
Posts: 1812
Nutzer
@Ralf27:

Hi,

ein gültiger HTTP-Request muss meines Wissens immer mit ner Leerzeile abgeschlossen werden, daher dass \n in C.

Wie Du das in MBasic umsetzen kannst, kann ich Dir leider nicht sagen.

[ - Antworten - Zitieren - Direktlink - ]

13.08.2006, 14:52 Uhr

thomas
Posts: 7675
Nutzer
@Ralf27:

301 ist eigentlich kein Fehler, sondern eine Umleitung. Warum dein Provider deine Homepage nach perchtoldsdorf.com umleitet, ist eine andere Frage.

Wenn du die komplette URL in den GET-Befehl schreibst, funktioniert es. Einige Server möchten das offenbar, z.B. auch Google.

"Bad Request" habe ich nirgends bekommen.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

13.08.2006, 23:54 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von thomas:
Wenn du die komplette URL in den GET-Befehl schreibst, funktioniert es. Einige Server möchten das offenbar, z.B. auch Google.

Danke, somit geht es. Ich frag mich wirklich wieso ich selbst nicht drauf gekommen bin. Jetzt bekomme ich die 200, bzw. OK.

Sinn der Übung:
Ich will im Menu in meinem Programm die Möglichkeit einbauen, das man mit einem einfachen Klick die neueste Version runterladen kann.
Es geht mit diesem TCP: wirklich wesentlich einfacher als ich es mir je vorgestellt habe.

Allerdings muß ich dazu noch ein paar Hürden von C->MBasic überwinden, vorallem das richtige runterladen. Muß ich mir später mal genauer ansehn und mal durchtesten.

--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]


-1- 2 3 4 [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Progamm<->Internet<->Programm [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2022 by amiga-news.de - alle Rechte vorbehalten.
.