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

1

24.03.2015, 16:09

Serversuche via Broadcast

Hey Leute,



ich habe aktuell vor einen Server auf meinem Rechner laufen zu lassen, welcher mit meinem Handy (App) kommuniziert.

Nun möchte ich das etwas flexibler machen, sprich dass mein Handy
automatisch den Server findet bzw. eine Serverliste generiert, mit allen
Rechnern im Netzwerk, wo mein Server drauf läuft.

Ich habe mir das so gedacht, dass die App 3 UDP Broadcast Pakete mit
spezieller Signatur rausschickt (an 255.255.255.255) und alle Server mit
einer bestimmten Syntax antworten, so dass der Client die Adressen und
die Ports der Server hat.

Nun wollte ich wissen, ob das was ich vor habe möglich ist, ohne einen
festen Port für den Server festzulegen. Würde ich meinem Server den UDP
Port 23151 geben, dann würde das ganze ja nur funktionieren, wenn noch
kein anderes Programm diesen Port hat und ich möchte das jetzt nicht den
Zufall überlassen (würde der Port belegt sein und man stattdessen 23152
nehmen, dann müsste dies der Client ja auch wissen).

Gibt es einen Broadcast Port bzw. muss man bei einer Broadcast Nachricht überhaupt einen Port angeben?





Wie kann ich das regeln?





Gruß

T

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

24.03.2015, 16:23

Vielleicht hilft das.

3

24.03.2015, 16:34

Wie sähe denn das Äquivalent in C++ aus? Arbeite noch nicht lange mit C++, von daher ist mir diese scheiß Windows API Syntax ziemlich unintuitiv.

4

24.03.2015, 16:38

Tjo dann würd ich dir raten dich weiter mit C++ und programmierung allgemein zu beschäftigen ;)

5

24.03.2015, 16:41

Tjo dann würd ich dir raten dich weiter mit C++ und programmierung allgemein zu beschäftigen ;)

Jo genau das habe ich vor, bevor ich da aber weiter machen kann müsste ich dieses spezielle Problem lösen, deshalb frage ich ja auch hier. Macht ja wenig Sinn irgendeinen Scheiß den ich nicht brauche in c++ zu programmieren, nur um ein Problem bei der Sache die ich eigentlich programmieren möchte zu lösen...

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

6

24.03.2015, 16:42

Von der WinAPI habe ich auch keine Ahnung.

7

24.03.2015, 16:49

Aber welcher Teil des folgenden Codes soll denn bitte dafür verantwortlich sein, dass der Socket Nachrichten von allen Ports empfängt bzw. dass an alle Ports gesendet wird?
Das sieht für mich wie ein normaler UDP Server Socket aus, welcher irgendeinen freien Port benutzt .

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
mainSocket.Bind(new IPEndPoint(IPAddress.Parse("192.168.0.1"), 0));
mainSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);                           

byte[] byTrue = new byte[4] { 1, 0, 0, 0 };
byte[] byOut = new byte[4] { 1, 0, 0, 0 }; 

// Socket.IOControl is analogous to the WSAIoctl method of Winsock 2
mainSocket.IOControl(IOControlCode.ReceiveAll, //Equivalent to SIO_RCVALL constant of Winsock 2
    byTrue,
    byOut);

//Start receiving the packets asynchronously
mainSocket.BeginReceive(byteData,0,byteData.Length,SocketFlags.None,new AsyncCallback(OnReceive),null);

8

24.03.2015, 16:53

Für die Winsock API ist das hier ein gutes Tutorial zur Netzwerkprogrammierung: http://www.c-worker.ch/winsock/index.php. Ansonsten gibt es auch andere gute Netzwerkbibliotheken, du kannst ja mal danach googeln. Für Broadcast Nachrichten bei Winsock guck dir das mal an: http://tangentsoft.net/wskfaq/intermediate.html#broadcast und http://www.csee.usf.edu/~christen/tools/udpClientBroadcast.c

Tobiking

1x Rätselkönig

  • Private Nachricht senden

9

24.03.2015, 17:17

Aber welcher Teil des folgenden Codes soll denn bitte dafür verantwortlich sein, dass der Socket Nachrichten von allen Ports empfängt bzw. dass an alle Ports gesendet wird?

Ich würde mal auf den Teil tippen der "ReceiveAll" beinhaltet. Im Kommentar steht dann sogar noch welche Funktion das entspricht wenn man direkt mit Winsock arbeitet.

Werbeanzeige