Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

41

27.05.2012, 13:32

Ich will auch nicht über das Internet broadcasten. In diesem Fall muss man sich die IP des Host eben irgend wie anders beschaffen.
Aber wenn man die mal hat, dann sollte es in der socket-Programmierung keinen großen Unterschied zu einer LAN Verbindung geben, oder?!

Hat bei mir aber leider noch nicht funktioniert. Ich habe folgendes ausprobiert. Mein Progarmm so erweitert, dass man die IP des Host auch manuell eintippen kann.
War dann mit meinem Laptop über Threading mit meinem Smartphone im Internet und mit meinem Desktop PC ganz normal über unseren Router - damit sich die PCs
auf keinen Fall über LAN bzw. WLAN verbinden können (es soll ja über das Internet gehen).
Dann habe ich die IP meines Desktops über www.wieistmeineip.de ermittelt, einen Host in meinem Programm gestartet und per manueller Eingabe mit meinem Laptop dem Host beigetreten. Aber da kam nichts an.
Ich konnte auf diese Weise keine Verbindung herstellen.

Was also muss ich anders machen, wenn ich mein Netzwerk Programm - und später dann meine Netzwerk Spiele - auch Internet fähig machen will?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

42

27.05.2012, 13:37

Prinzipiell funktioniert das, wenn man die IP mal hat (beachte da aber auch NAT) über das Internet genau gleich, wie im lokalen Netz. Allerdings musst du da sicher auf Sachen, wie Portsperren (vom Router z.B) beachten, aber auch, dass du sicher eine höhere Latenz hast und deine Programme damit klar kommen müssen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

43

28.05.2012, 08:00

Jo, der Router hat vermutlich das Paket nicht weitergeleitet. Da bedarf es natürlich einer entsprechenden Freischaltung. Entweder manuell im Setup des Routers oder über UPnP durch das Programm selbst (einfache SOAP-Requests, is nich so schwierig).
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

44

16.07.2012, 17:53

So, ich bin mal wieder an meinem Netzwerk-System am arbeiten. Das UDP Netzwerk funktioniert schon ganz gut. Jetzt will ich das aber noch um ein TCP Netzwerk erweitern.
Natürlich primär wegen der Sicherheit in TCP im Gegensatz zu UDP.

Meine erste Frage dazu ist: kann ich mit "ioctlsocket" auch TCP Sockets als Non-Blocking einstellen? Oder geht das nur mit UDP Sockets?
Wenn ja, sollte ich damit doch das Threading-Problem dem Betriebssystem überlassen können, richtig?!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

45

16.07.2012, 18:22

Ja TCP+non blocking geht definitiv, was du aber genau mit threadingproblem meinst, weiß ich nicht.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

46

16.07.2012, 18:35

Naja wenn mein Socket blockiert, würde ich das für ein Game natürlich über Threads machen, also Senden/Empfangen eben.
Denn wenn gerade kein Spieler etwas sendet, und ich damit erst mal eine ganze Weile nichts mehr empfange, will ich nicht,
dass das gesammte Programm stehenbleibt.
Also würde ich so etwas in Threads packen. Da Threading programmierung aber nicht wirklich Spaßig ist, wäre es mir lieber, wenn das Betriebssystem das für mich übernimmt.
Denn da haben sicherlich schon lange, viele, gute Programmierer dran gearbeitet, die das mit Sicherheit effizienter und sicherer hinbekommen, also wenn ich das selber machen muss.
Daher meine Frage: ob bei Non-Blocking Sockets, das Threading-Gedöns das OS für mich über nimmt?!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

47

16.07.2012, 21:15

Ein OS kümmert sich immer erstmal auf seiner ebene um das Senden, Empfangen usw. und hinterlegt die entsprechenden Informationen auch immer in den durch ein socket ansprechbaren Datenbereich (diverse Puffer) ungeachtet dessen ob blocking oder nonblocking. Wie genau das intern abläuft ist dem OS überlassen/ wird durch das socket-Konzept nicht festgelegt. Daher verstehe ich deine Frage schlicht und ergreifend nicht, da blocking bzw. non blocking per se absolut nichts mit Threading zu tun hat. Es bedeutet nur dass alle Aufrufe auch im Falle das die Aktion gerade garnicht möglich ist, sofort zurückkehren.
"Dumme" Server (blocking) kann man übrigens ärgern indem man dafür sorgt, dass sie immer mehr Daten schicken wollen und man derweil den Empfangspuffer garnicht leert -> Empfangspuffer läuft voll -> Sendenpuffer auf serverseite läuft voll und dank blocking macht das "send" dicht.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

48

16.07.2012, 21:58

Der Sendepuffer auf dem Server läuft voll, wenn ich lokal die Daten des Sockets nicht auslese? Puffert das OS die Daten nicht einfach transparent bis die Anwendung sie abruft, unabhängig davon, ob die Anwendung sie nun abruft oder nicht?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

49

16.07.2012, 23:07

Nur max bis zum recv Buffer limit; zumindest unter Windows (gerade nochmal getestet, da ich mir nicht sicher war, ob e nur passierte wenn beide Anwendungen auf einem Rechner liefen).
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

50

17.07.2012, 06:44

Na das is ja gruselig. 8|
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige