Allerdings finde ich keine vergleichbaren Scripte für einen Server. Ich habe tatsächlich Stunden damit verbracht und verschiedene Ansätze verfolgt wie ich zwei Computer nur über den RPG-Maker verbinden kann ohne einen externen Server zu verwenden. Ohne Erfolg versteht sich, sonst würde ich nun nicht hier um Hilfe bitten.
...
Du brauchst keine "vergleichbaren" Skripte weil in den obigen so wie es aussieht schon alles drin ist.
Die Unterscheidung Server/Client ist primär eine inhaltliche, sprich welcher Teil übernimmt welche Aufgaben (Server bietet Dienst an, Client nimmt Dienst in Anspruch), weniger eine technische. Wenn du eine Client-Client Verbindung haben willst, implementierst du in aller Regel Client und Server in einem. Meistens läuft das so, einer der beiden Spieler "eröffnet" das Spiel und fungiert damit als Server, der andere verbindet sich dann zu dessen IP und fungiert als reiner Client.
Die Socket-Klasse ist so gesehen "alles" was du brauchst. Ein Socket ist eine Schnittstelle zwischen Netzwerk und Programm. Du kannst dich über einen Socket mit einem Server verbinden, genauso kannst du mithilfe eines Sockets aber auch auf einkommende Verbindungen warten (listen - horchen) und diese annehmen (accept).
Für beides scheint es in der obigen Klasse Funktionen zu geben, somit hast du eigentlich alles was du brauchst.
Du musst also so vorgehen:
1. Spieler A eröffnet das Spiel
-> A erstellt einen Socket und horcht auf einem fest definiertem Port auf Verbindungen
2. Spieler B verbindet sich zur IP-Adresse von A
-> Socket erstellen und eine Verbindung zu A als Server aufbauen (IP-Addr. von A, und der vorher definierte Port auf dem A horcht)
3. Das Programm von A nimmt mittels accept die Verbindung an.
4. Ab jetzt können beide über diese Sockets Daten versenden und empfangen
Da die Skripte oben aber wohl nur eine sehr rohe Anbindung an die WinSock-DLL von Windows bieten, keine benutzerfreundliche Netzwerkbibliothek, lohnt es sich aber vermutlich ein wenig generell über Netzwerkprogrammierung mit Sockets schlau zu machen.
Vielen Dank für die Antwort.
Ich habe bereits Netzwerkspiele programmiert, nur war dies damals mit Java wo ich getrennte Klassen für Server und Clientverbindung zur Verfügung hatte. Ich wusste nicht direkt wie groß der Unterschied zwischen beiden ausfallen würde. Ich habe mir das Programmieren bisher größtenteils selbst beigebracht indem ich das Internet durchstöberte und immer wieder verschiedenes ausprobiert habe.
Wie genau habe ich den Server Socket zu initialisieren? Immerhin scheinen alle Methoden eine Host angabe zu benötigen, der Server sollte lediglich eine Port angaben brauchen nehme ich an.
Könntest du mit diesen Klassen ein kurzes Beispiel dafür geben? Das wäre sehr freundlich von dir, ich lerne immer sehr gerne an Beispielen.
Ich selbst kenn mich kaum aus mit der Ruby-Klasse oben, oder der Windows-Socket Library.
Vielleicht hilft dir das hier weiter: Getting started with Winsock
Die Funktionen des Winsocks-Moduls scheinen ja 1-1 die Windows-Funktion aufzurufen, entsprechend solltest du wohl hoffentlich damit klar kommen.
Vielen Dank für die Adresse.
Ich habe es mir einmal angeschaut, bisher habe ich folgendes zustande gebracht:
Allerdings kann der Clientsocket derzeit noch keine Verbindung zum Serversockt herstellen, es könnte an meiner Firewall oder dem Router liegen, oder an dem Code. Ersteres kann ich überprüfen, letzteres werde ich alleine wahrscheinlich nicht herausfinden können.
Kann mir jemand hierbei helfen?
Mit einem funktionierenden Rubybeispiel direkt kann ich dir nicht behilflich sein.
Allerdings kenne ich Client-Server Anwendungen eher so das es auch wirklich beides gibt.
Einen Client und einen Server.
Wenn ich deinen Code richtig lese, versuchst du erstmal einen einen Socket auf Port 5 aufzumachen.
Das ist schonmal nicht möglich, da die Ports von 0 - 1023 (well known Ports) reserviert sind.
Du kannst also einen Port ab 1024 nutzen.
Die nächste Sache ist halt wie am Anfang erwähnt das du den Server auf den Port horchen lässt und danach direkt im
Serverprogramm den Client initalisiert. An sich müsste es aber so laufen das der Server auf den Sockel horcht und dann
in einer Dauerschleife auf einen Verbindungsversuch wartet. Wenn man nun noch die Anfragen mehrerer Clients bearbeiten will,
müsste man für jede eingehende Verbindung einen Thread öffnen. Für einen einfachen Versuch würde aber erstmal reichen einen eingehenden
Verbindungsversuch anzunehmen.
Als zweites brauchst du dann das Clientprogramm welches sich versucht mit dem Serversocket zu verbinden. Das sollte allerdings ebenfalls ein
externes Programm sein.
@makenshi: Der Port welchen ich verwenden will ist 9999, die 5 als Parameter der .listen Methode gibt, soweit ich verstanden habe, die maximale Anzahl an Verbindungen an welche der Server aufnimmt.
Nur als Information zum oben beschriebenen, der Server wird initialisiert, der Client auch, der Fehler welchen ich erhalte liegt in der Zeile: "$c.connect($aic)", alle vorhergehenden scheinen für den Computer in Ordnung zu sein.