[uralt Bug?]ReceiveNetworkData-Aufruf ohne anliegende Daten

Für allgemeine Fragen zur Programmierung mit PureBasic.
- chris -
Beiträge: 195
Registriert: 24.08.2005 19:52
Wohnort: Stadtallendorf

Re: [uralt Bug?]ReceiveNetworkData-Aufruf ohne anliegende Da

Beitrag von - chris - »

Hier mal was zum hängen des Programms, bei ReceiveNetworkData:

http://msdn.microsoft.com/en-us/library ... 85%29.aspx
When a socket is created, it operates in blocking mode by default.

Code: Alles auswählen


; server

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf

Port = 6832

If CreateNetworkServer(0, Port)
 
  Repeat
   
    SEvent = NetworkServerEvent()
   
    If SEvent
     
      ClientID = EventClient()
     
      Select SEvent
         
        Case #PB_NetworkEvent_Connect
         
          MessageRequester("PureBasic - Server", "A new client has connected !", 0)
         
         
      EndSelect
    EndIf
    
    Delay(1)
   
  Until Quit = 1
 
  CloseNetworkServer(0)
Else
  MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf

End   

Code: Alles auswählen


; client
If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf

Port = 6832
Repeat
  ConnectionID = OpenNetworkConnection("127.0.0.1", Port)
  Delay(1000)
Until ConnectionID > 0
If ConnectionID  
  s = ConnectionID(ConnectionID)
  arg = 1
  ioctlsocket_(s, #FIONBIO, @arg)
  *DatenPuffer = AllocateMemory(100)
  Ergebnis = ReceiveNetworkData(ConnectionID, *DatenPuffer, 10) ; without received data programm wait forever
  MessageRequester("PureBasic - Client", "Ergebnis: " + Str(Ergebnis), 0)
  CloseNetworkConnection(ConnectionID)
Else
  MessageRequester("PureBasic - Client", "Can't find the server (Is it launched ?).", 0)
EndIf

End

PB v5.72 x86/x64
Windows 10 Pro 64bit
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: [uralt Bug?]ReceiveNetworkData-Aufruf ohne anliegende Da

Beitrag von Sicro »

NicTheQuick hat geschrieben:
Toshy hat geschrieben:3. Wie von vielen Programmierern in allen Sprachen fehlen viele zusätzliche "Parameter" bei den Netzwerkfunktionen. PB macht es einem schön einfach bei Netzwerkdingen, das ist super und so für viele einfacher und schneller zu handhaben. Aber Dinge wie das binden eines Servers an eine bestimmte IP / Netzwerkkarte wären echt wichtig.
Was hat das mit Netzwerkbefehlen zu tun? Wenn du deinen Server an eine bestimmt IP binden willst, dann musst du das mit deinem Provider klären oder dyndns verwenden.
NicTheQuick, er meint damit keinen gemieteten Server von einem Provider, sondern "CreateNetworkServer". Demzufolge meint er mit "an eine IP binden", festlegen zu können, mit welcher Netzwerkkarte/IP die Verbindung stattfinden soll. :)

Siehe WinAPI-Funktion "bind":
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Toshy
Beiträge: 713
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Re: [uralt Bug?]ReceiveNetworkData-Aufruf ohne anliegende Da

Beitrag von Toshy »

@funkheld
Ich nutze doch gar kein echtes "Netzwerk" , sondern nur die LoopBackadresse. Netzwerkt ist auch ok.
Und der CLIENT hängt sehr wohl.

@NickTheQuick:
Und es ist diese "binding" gemeint, den Server also an eine bestimmte Netzwerkkarte und damit IP zu binden. Ich habe auf meinem Server zwei Netzwerkkarten und der Server sollte wenn möglich nur die Verbindungen der einen annehmen.

@-chris-
Englisch ist nicht meine Sache. Kann das also nicht komplett verstehen. ISt auch nicht wichtig,
da ich zuerst dieses Problem in der Fehlersektion zur Hilfe schrieb(http://www.purebasic.fr/german/viewtopi ... 39#p302139). Es steht nun mal in der Hilfe, das der Rückgabewert bei PB -1 ist, wenn etwas nicht klappt. und die selbe Funktion verhält sich am Server anders als beim Clienten. So steht das leider nicht in der Hilfe. Ob nun die Hilfe falsch ist oder ein fehler in PB weiß nur das PB Team. Nach der Hilfedatei aber stimmt das Verhalten nicht mit dem geschriebenen überein.

Bei deinem code läuft es durch, was auch immer der Aufruf ändert. Aber fakt ist, das hier halt ein fehler in PB oder der PB-Hilfe vorliegt.

zu deinen drei Zeilen code: wenn ich NUR AM CLIENTEN immer nach jedem erstellen einer Verbindung deinen Code aufrufe, dann sollte alles laufen? PB hat dann wohl auf der Clientseite genau das vergessen.
Ich hoffe nur, es der Code bringt die "disconnect-routing" von purefan und dark(player) nicht durcheinander.

@Sicro
Ich hatte die zweite Seite mit Antworten und deine erst gesehen, nachdem ich das andere schon geschrieben hatte.

Ich möchte natürlich danken für die Hilfe. Ich weiß nun ja, das hier was nicht stimmt. Jetzt muß wohl das PB-Team rann und klären.

Toshy
1. Win10
PB6.1
Toshy
Beiträge: 713
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Re: [uralt Bug?]ReceiveNetworkData-Aufruf ohne anliegende Da

Beitrag von Toshy »

@- chris -:
If ConnectionID
s = ConnectionID(ConnectionID)
arg = 1
ioctlsocket_(s, #FIONBIO, @arg)
*DatenPuffer = AllocateMemory(100)
Ergebnis = ReceiveNetworkData(ConnectionID, *DatenPuffer, 10) ; without received data programm wait forever
MessageRequester("PureBasic - Client", "Ergebnis: " + Str(Ergebnis), 0)
CloseNetworkConnection(ConnectionID)
Else
MessageRequester("PureBasic - Client", "Can't find the server (Is it launched ?).", 0)
EndIf
1. Sag mal, muß ich diesen Socketaufruf vor jedem "ReceiveNetworkData()" aufrufen oder nur einmal nach Aufbau der Verbindung?
2. Welchen Type muß die Variable "arg" haben? Long oder Integer? Ob immer 4 Byte oder auch mal 8 wäre schon wichtig. oder reicht gar nur ein Byte?
3. ;uß variable "s", also der Socket ein long oder Integer sein?

ich will nur unter 32-bit und 64-bit zukünftig den richtigen Typ übergeben.
Danke
Toshy
1. Win10
PB6.1
Antworten