UDP-Protokoll
Verfasst: 10.05.2012 21:47
Hallösche.
Ich habe eine vermutlich eher allgemeine Frage:
Es gibt die Möglichkeit, von einem Programm (Minecraft-Server) per Netzwerkverbindung einige Daten abzufragen. Verwendet wird das UDP-Protokoll.
Das Handshaking um an den Server "anzudocken" ist eigentlich relativ trivial: man fordert ein Verbindungstoken an und bekommt dann ein 4 Byte-Token zurück das für einen gewissen Zeitraum gültig ist und mit dem man seine Queries legitimieren kann. Alles per UDP.
Das nötige Datenpaket an den Server senden ist einfach. Eine Anwort kommt auch postwendend, aber warum auch immer will der anfragende Client die Antwort nicht empfangen (ReceiveNetworkData()).
Ich habe also ein kleines Serverprogramm geschrieben um zu testen. Auch hier klappt das Empfangen der Antwort nicht.
Spannend ist, dass wenn ich im Client und im Server von #PB_Network_UDP auf #PB_Network_TCP wechsle alles einwandfrei funktioniert.
Ich bin kein Netzwerkprotokoll-Crack, vermute aber mal, dass es ein generelles Problem beim Empfangen via UDP gibt, oder?
Hier mal der Bastel-Code von Server...
...und Client
Wie gesagt, ersetzt man UDP mit TCP klappt alles.
Hat jemand eine Idee?
Grüße,
Paul
Ich habe eine vermutlich eher allgemeine Frage:
Es gibt die Möglichkeit, von einem Programm (Minecraft-Server) per Netzwerkverbindung einige Daten abzufragen. Verwendet wird das UDP-Protokoll.
Das Handshaking um an den Server "anzudocken" ist eigentlich relativ trivial: man fordert ein Verbindungstoken an und bekommt dann ein 4 Byte-Token zurück das für einen gewissen Zeitraum gültig ist und mit dem man seine Queries legitimieren kann. Alles per UDP.
Das nötige Datenpaket an den Server senden ist einfach. Eine Anwort kommt auch postwendend, aber warum auch immer will der anfragende Client die Antwort nicht empfangen (ReceiveNetworkData()).
Ich habe also ein kleines Serverprogramm geschrieben um zu testen. Auch hier klappt das Empfangen der Antwort nicht.
Spannend ist, dass wenn ich im Client und im Server von #PB_Network_UDP auf #PB_Network_TCP wechsle alles einwandfrei funktioniert.
Ich bin kein Netzwerkprotokoll-Crack, vermute aber mal, dass es ein generelles Problem beim Empfangen via UDP gibt, oder?
Hier mal der Bastel-Code von Server...
Code: Alles auswählen
*Buffer = AllocateMemory(1500)
OpenConsole()
PrintN("*** Test-Server ***")
If InitNetwork() = 0
PrintN(" - Keinen TCP/IP-Sockel gefunden!")
End
EndIf
server = CreateNetworkServer(#PB_Any, 25565, #PB_Network_UDP)
If server = 0
PrintN(" - Server konnte nicht erstellt werden!")
End
EndIf
Repeat
SEvent = NetworkServerEvent()
If SEvent
ClientID = EventClient()
Select SEvent
Case #PB_NetworkEvent_Connect
PrintN(" -> Clientverbindung: " + IPString(GetClientIP(ClientID)) + ":" + Str(GetClientPort(ClientID)))
Case #PB_NetworkEvent_Data
PrintN(" -> Eingehende Daten von " + IPString(GetClientIP(ClientID)) + ":" + Str(GetClientPort(ClientID)))
ReceiveNetworkData(ClientID, *Buffer, 1000)
PrintN(" -> Empfangene Nachricht: "+PeekS(*Buffer))
PrintN(" <- Antwort senden")
SendNetworkString(ClientID, "Hier Server, was ist?")
Case #PB_NetworkEvent_Disconnect
PrintN(" -> Verbindung beendet")
Quit = 1
EndSelect
EndIf
Until Quit
Repeat
Until Inkey() <> ""
CloseNetworkServer(server)
CloseConsole()
EndCode: Alles auswählen
Port = 25565
mcs_ip.s = "127.0.0.1"
*Buffer = AllocateMemory(1500)
OpenConsole()
PrintN("*** UDP-Verbindung testen ***")
PrintN("")
If InitNetwork() = 0
PrintN(" - Keinen TCP/IP-Sockel gefunden!")
End
EndIf
net_handle = OpenNetworkConnection(mcs_ip, Port, #PB_Network_UDP)
If net_handle = 0
PrintN(" - Keine Verbindung möglich!")
End
EndIf
PrintN(" Zieladresse: " + mcs_ip + ":" + Str(Port))
SendNetworkString(net_handle, "Hallo Server?")
Repeat
laenge = ReceiveNetworkData(net_handle, *Buffer, 1500)
Until laenge > 0 Or laenge = -1
If laenge = -1
PrintN(" - Verbindung verloren!")
End
EndIf
PrintN(" Empfangene Antwort (" + Str(laenge) + " Bytes): " + PeekS(*Buffer))
Repeat
Until Inkey() <> ""
CloseNetworkConnection(net_handle)
CloseConsole()
EndHat jemand eine Idee?
Grüße,
Paul