Seite 1 von 1

SendNetworkString via IPv6 UDP

Verfasst: 24.03.2015 12:29
von AndyMars
Hallo miteinander

Ich experimentiere gerade etwas mit den Netzwerkfunktionen von PureBasic. Jetzt habe ich ein Verhalten, dass ich nicht verstehe: Wenn ich den Code unten mal mit IPv4 und mal mit IPv6 ausführe, bekomme ich nicht dieselben Ergebnisse - kann mir das jemand erklären?

Die Debug Ausgabe mit IPv4:

Code: Alles auswählen

6
Send to localhost:21
Die Debug Ausgabe mit IPv6:

Code: Alles auswählen

-1
Send_FAIL to localhost:21

Code: Alles auswählen

If InitNetwork()
	port=21
	Server$="localhost"
	text$="Hallo!"
	;ConnectionID = OpenNetworkConnection(Server$,port,#PB_Network_IPv4|#PB_Network_UDP)
	ConnectionID = OpenNetworkConnection(Server$,port,#PB_Network_IPv6|#PB_Network_UDP)
	If ConnectionID
		AnzByte=SendNetworkString(ConnectionID, text$)
		Debug AnzByte
		If AnzByte>0
			Debug "Send to "+Server$+":"+Str(port)
		Else
			Debug "Send_FAIL to "+Server$+":"+Str(port)
		EndIf
		CloseNetworkConnection(ConnectionID)
	Else
		Debug "Connect_FAIL to "+Server$+":"+Str(port)
		Debug WSAGetLastError_()
	EndIf
EndIf
Btw: Ich habe das mit PB 5.24 LTS 32&64bit und PB 5.31 32bit unter Windows 7 64bit versucht.

Grüsse euch
Andy

Edit 25.3.15: marschner.ch durch localhost ersetzt, um weniger zu verwirren
Edit 16.3.WSAGetLastError_()

Re: SendNetworkString via IPv6 UDP

Verfasst: 24.03.2015 17:08
von Andesdaf
blöde Frage: wird IPv6 bei dir überhaupt unterstützt?

Re: SendNetworkString via IPv6 UDP

Verfasst: 25.03.2015 07:01
von AndyMars
Andesdaf hat geschrieben:blöde Frage: wird IPv6 bei dir überhaupt unterstützt?
Es gibt keine blöde Fragen ;). Ja, wird es (Win 7, da ist es standard mässig an und sollte nicht abgeschaltet werden) - auf IPv6 und TCP funktioniert das ganze auch, ebenso mit IPv4 und UDP. Ich hab sicherheitshalber auch einmal die Windows-Firewall deaktiviert... es bleibt sich gleich. Bei TCP brauche ich natürlich einen Server, der die Verbindung annimmt, bevor ich ein SendNetworkString machen kann.
Mit der compilierten EXE hab ich dasselbe auch schon auf anderen Rechnern festgestellt (Win7, Win8)

Re: SendNetworkString via IPv6 UDP

Verfasst: 25.03.2015 10:48
von Tommy
Liefert dein Provider eine IPv6-Addresse?
Was sagt wieistmeineip.de dazu?

Re: SendNetworkString via IPv6 UDP

Verfasst: 25.03.2015 13:25
von Andreas21
Bei mir geht es auch nicht unter Windows und ich habe eine IPV6 Adresse.
Ihre IP-Adresse lautet: 78.42.XX.XXX
Ihre IPv6-Adresse lautet: 2A02:xxxx:1B1:xxxx:5D80:xxxx:659A:xxxx
Ihre System-Informationen:Windows 7 Chrome 41.0 Deutschland

Re: SendNetworkString via IPv6 UDP

Verfasst: 25.03.2015 21:29
von Imhotheb
Wird auch von deinem Gateway (FritzBox, Speedport etc.) eine lokale IPv6 zugewiesen? unterstützt der DNS IPv6?
oder wählst du dich direkt am Rechner ein?

klappt ein Ping mit IPv6?

Re: SendNetworkString via IPv6 UDP

Verfasst: 25.03.2015 23:42
von AndyMars
Ah, vielleicht war es etwas ungeschickt, eine Internet-Adresse in dem Beispiel zu verwenden :). Eigentlich spielt sich das Ganze lokal ab... entweder auf localhost oder zu einem virtuellen Rechner in einer VirtualBox. Da habe ich auch durchaus einen Serverteil. Aber da UDP ja ein verbindungsloses Protokoll ist, spielt es meiner Meinung nach keine Rolle, ob da nun ein Server ist oder nicht... und um den Code möglichst simpel zu halten, lasse ich den Server hier deshalb auch weg.

Dass mein IPv6-Netzwerk funktioniert, erachte ich als erwiesen, da ich mit IPv6 TCP problemlos Daten versenden kann. In diesem Fall mit dem zugehörigen Server, da ich ohne den ja keine Connection öffnen könnte - und da kommen die Daten übrigens auch an (...ebenso mit IPv4 UDP). Ping geht im Übrigen auch...

Im Fall von IPv4 UDP macht die Funktion SendNetworkString() ja auch ohne Server genau das, was ich von ihr erwarten würde, sie sendet die Daten einfach - der Rückgabewert: die Anzahl der gesendeter Bytes (bzw. wie ich glaube, Zeichen, denn der Rückgabewert ist auch bei Unicode derselbe).
Unter IPv6 UDP müsste ich doch mit dem sonst identischen Code genau dasselbe Ergebnis erhalten - da liefert die Funktion aber -1 - was ich als Fehler interpretiere, obwohl das in der Hilfe so nicht dokumentiert ist: "Gibt die Anzahl an gesendeten Bytes zurück." ...aber da ist ein negativer Wert unsinnig... Btw.: dasselbe Verhalten lässt sich auch mit SendNetworkData() beobachten...

Sieht irgend jemand einen Fehler in meinen Überlegungen...?

PS: Hab grad noch gemerkt, das unter SendNetworkData() folgendes in der Hilfe steht:
Wenn nichts gesendet werden konnte, dann ist das Ergebnis gleich -1.
Vermutlich bedeutet es bei SendNetworkString() dasselbe.

Aber warum sendet der Befehl die Daten nicht? Ich kapiere es nicht...

Re: SendNetworkString via IPv6 UDP

Verfasst: 26.03.2015 11:15
von HeX0R
Was sagt den WSAGetLastError_() bei Dir? Auch 10014, also WSAEFAULT?
Dann würde ich vermuten, da ist ein Bug in PB.
Man sollte es mal mit API nachbauen.

Re: SendNetworkString via IPv6 UDP

Verfasst: 26.03.2015 11:26
von AndyMars
Jawohl, ich bekomme auch 10014 von WSAGetLastError_().

Edit: Aber ich glaube nicht, dass ich das mit API hinbekomme...

Re: SendNetworkString via IPv6 UDP

Verfasst: 04.11.2016 17:47
von mback2k
Da der Fehler auch mit SendNetworkData weiterhin auftritt, habe ich ihn mal im englischen Forum gemeldet:
http://purebasic.fr/english/viewtopic.php?f=4&t=66878