Nachricht senden, wenn IP-Adresse bekannt ist

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

ChristianK

Betreff: Nachricht senden, wenn IP-Adresse bekannt ist

BeitragSo, Mai 13, 2007 16:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Noch eine Frage zum Senden von Daten im INet:
Kann man direkt eine Nachricht zu einem anderen Spieler senden, ohne dass er vorher wie bei GNet zum Host ( also zum dem der die Nachricht versenden soll ) connected hat?

Vielen Dank schonmal im Voraus. Very Happy

stfighter01

BeitragSo, Mai 13, 2007 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
nur wenn derjenige eine nachricht von dir erwartet.
also einen port öffen hält um eine verbindung auf deine anfrage hin zu erstellen.

[edit]
mach dich mal schlau und such nach:
sockets, server-sockets
tcp/ip u. upd protokoll.

vielleicht hilft es zum allgemeinen verständnis noch ein wenig grundwissen über http zu besitzten.

damit kannst du dir dann vielleicht einen reim darauf machen wie das internet generell arbeitet.
Denken hilft!
 

ChristianK

BeitragSa, Mai 19, 2007 13:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
also einen port öffen hält um eine verbindung auf deine anfrage hin zu erstellen.

Genau das ist mein Problem. Ich habe gehört, dass der Router und die Firewall Ports sperren, aber ich möchte, dass der Spieler das Programm auch benutzen kann, ohne Einstellungen in seinem Router vornehmen zu müssen. Ist das irgendwie möglich?

Tankbuster

BeitragSa, Mai 19, 2007 13:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie gesagt... wenn ein PC hinter der Firewall auf eine Nachricht @ Port x wartet, dann wird die Firewall die Nachricht auch zu diesem PC durchlassen! Außer man sperrt das total! 0o
Guck dir mal an, wie Skype das macht Wink
Ist ne ganz interessante Geschichte!
Twitter
Download Jewel Snake!
Windows|Android
 

ChristianK

BeitragSa, Mai 19, 2007 14:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay, noch etwas:
Wir haben einen Router, an dem 3 Rechner angeschlossen sind. Der Router hat dann z.B. die IP: 77.143.104.87
Alle Rechner, die an diesen Router angeschlossen sind, bekommen dann so eine IP: 192.168.178.x
Wenn der Router also etwas aus dem Inet empfängt, schickt er es an eine der lokalen IPs.
Angenommen, ich möchte den Rechner meines Bruders kontaktieren, woher weiß der Router, an wen er die Nachricht senden soll? Vom Inet aus gesehen hat ja der Router nur eine IP und die lokalen kann man ja außerhalb nicht verwenden.

Tankbuster

BeitragSa, Mai 19, 2007 15:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja genau! Da kann man irgendwas am Router einstellen, glaub ich 0o
Mir fällt der Name aber net ein -.-
Twitter
Download Jewel Snake!
Windows|Android
 

ChristianK

BeitragSa, Mai 19, 2007 15:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie machen das denn Online-Rollenspiele wie GuildWars oder Silkroad? Da braucht man ja am Router nichts einzustellen, das geht einfach so.

Ich bin grad ziemlich verzweifelt Crying or Very sad
und bekomme einfach keine Verbindung zwischen 2 Internetrechnern. Hat jemand vielleicht ein kleines Beispielprogramm oder ein Tutorial dafür?
 

Dreamora

BeitragSa, Mai 19, 2007 15:34
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du innerhalb des lokalen Netzwerkes kontakt aufnehmen willst musst du die lokale Netzwerk IP nehmen, du kannst nicht vom LAN ins INet und zurück aufs LAN bei den meisten Routern!

Wenn du vom netz was an ihn schicken willst: geht nur wenn er dir erst was geschickt hat, sonst gibts kein Forwarding ausser du hast DMZ oder static port forwarding eingerichtet. (oder natürlich einen dynamischen Trigger was bei neueren routern auch möglich ist, das ausgehend auf Port A einen eingehenden Port B temporär auf das System leitet)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Tankbuster

BeitragSa, Mai 19, 2007 15:38
Antworten mit Zitat
Benutzer-Profile anzeigen
DMZ <---- Genau.. so heist das -.-
Die Spiele wie GW haben ja den Client! Der sendet dann an der Server, und dadurch bekommt der Server sozusagen die Erlaubnis zurückzuschicken!
Twitter
Download Jewel Snake!
Windows|Android
 

ChristianK

BeitragSa, Mai 19, 2007 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke erstmal. Smile

Zitat:
geht nur wenn er dir erst was geschickt hat

Aber wie denn, wenn es noch keine Verbindung gibt?
 

Dreamora

BeitragSa, Mai 19, 2007 16:01
Antworten mit Zitat
Benutzer-Profile anzeigen
tja einer muss den server machen, da wird der port automatisch zu dem system weitergeleitet. das heisst auch router einstellen für portforwarding.

UPNP kannst du weder nutzen (ohne winapi -> userlib) noch ist es in sicheren netzwerken überhaupt nutzbar weils ein massives sicherheitsproblem darstellt.


Ansonsten brauchst du, wie dir oben ja schonma gesagt wurde, eine struktur wie skype mit einem masterserver wo beide hinconnecten, daten austauschen via TCP (also ip - port) und sich dann beide was an die "wand" schicken. wenn danach der andere dorthin schreibt glaub der router das es eine antwort is und es geht. So kommt skype durch die firewalls ^^ *google ma nach dem skype artikel wie es dort geht für die ganz genaue auflistung wie der gag funktioniert*
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

ChristianK

BeitragSo, Mai 20, 2007 13:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab jetzt was zu Skype gefunden:

Zitat:
Skype verzichtet nämlich darauf einen oder mehrere zentrale Server zwischenzuschalten, um die Daten- und Sprachinformationen zu übermitteln.

...

Skype nutzt für die Kommunikation unter anderem den TCP-Port 80, der auch für das normale Surfen im Web verwendet wird. Dadurch funktioniert die Skype-Software auch hinter diversen Firewalls und NAT-Routern.

Ich habe dazu mal Folgendes programmiert und mit "localhost" funktioniert das auch, nur nicht übers Internet.

Server:

Code: [AUSKLAPPEN]
Framework brl.standardio
Import brl.socketstream

Local server:TSocket = CreateTCPSocket( )
Print "Server gestartet: " + BindSocket( server, 80 )
SocketListen( server )

Local stream:TSocketStream
Local accept:TSocket

Local line:String

While True

   accept = SocketAccept( server )
   
   If accept <> Null
   
      stream = CreateSocketStream( accept, True )
      If stream <> Null
         Print "Neue Verbindung ..."
      EndIf
   
   EndIf
   
   If stream <> Null
      While Not Eof( stream )
         line = ReadLine( stream )
         If line <> "" Print line
      Wend
   EndIf

Wend

Client:

Code: [AUSKLAPPEN]
Framework brl.standardio
Import brl.socketstream

Local client:TSocket = CreateTCPSocket( )
Local stream:TSocketStream

Local ip:String = Input( "IP des Hosts > " )

If ConnectSocket( client, HostIp( ip ), 80 )

   Print "Verbunden ..."
   stream = CreateSocketStream( client, True )
   
   If stream = Null
      Print "Stream konnte nicht erstellt werden ..."
      Input
      End
   EndIf
   
   WriteLine( stream, "Hallo, ich bin da!" )
EndIf

Input

Könnt ihr einen Fehler finden?

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group