Hi,
ich schreib zur Zeit ein Programm, dass beim Start einen Broadcast rauschickt um zu schauen ob bereits Server da sind, wenn nicht wartet es selber auf Anfragen.
Das funktioniert auch schon ganz gut, allerdings nur bei mir Zuhause im LAN.
An meiner Schule geht es allerdings nicht, wir haben aber auch nur normales Ethernet und da müsste ein Broadcast ja problemlos geschickt werden können oder?
Außerdem haben wir ein kleines NetTetris Game, das mit Sicherheit auch Broadcasts verwendet und auch funktioniert.
Weiß jemand woran das liegen könnte?
Noch ein bisschen Code, die Funktionen sind allerdings noch in der experimentiellen Phase, da das mein erstes WinSock Programm ist
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
int CGame::FindPlayer()
{
//Broadcast rauschicken
m_Socket = socket(AF_INET,SOCK_DGRAM,0); //Scoket für UDP erzeugen
int Broadcast=TRUE;
setsockopt(m_Socket, SOL_SOCKET, SO_BROADCAST,(char*)(&Broadcast),sizeof(int));
SOCKADDR_IN Addr;
Addr.sin_family=AF_INET;
Addr.sin_port= htons(PORT);
Addr.sin_addr.s_addr=INADDR_BROADCAST;
if(sendto(m_Socket, "hallo", 5,0,(SOCKADDR*)(&Addr),sizeof(SOCKADDR_IN)) <= 0) //Und ab mit dem Broadcast
return -1;
return 0;
}
//Wird als Thread aufgerufen und wird später die Nachrichtenfunktion
int CGame::NetworkMessageProc()
{
//Auf Broadcast warten
m_Socket = socket(AF_INET,SOCK_DGRAM,0); //Scoket für UDP erzeugen
SOCKADDR_IN Addr;
Addr.sin_family=AF_INET;
Addr.sin_port= htons(PORT);
Addr.sin_addr.s_addr=ADDR_ANY;
char buffer[255];
ZeroMemory(buffer, 255);
bind(m_Socket, (sockaddr*)&Addr, sizeof(Addr));
recv(m_Socket,buffer,255,0);
MessageBox(NULL, "Broadcast empfangen", buffer, MB_OK);
return 0;
}
|