OpenNetworkConnection() funktioniert nur mit Compile/Run?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Programie
Beiträge: 1280
Registriert: 06.08.2005 22:56
Computerausstattung: https://www.sysprofile.de/id160800
Wohnort: Gernsbach
Kontaktdaten:

OpenNetworkConnection() funktioniert nur mit Compile/Run?

Beitrag von Programie »

Hi,

Ich habe seit gestern ein Problem (Bug?) mit PB.
Der Befehl OpenNetworkConnection() funktioniert nur noch, wenn ich das Programm aus der IDE heraus kompiliere und starte. Wenn ich das fertige Executable erstelle hängt sich das Programm erst mal eine Weile an der Stelle mit OpenNetworkConnection() auf und die Funktion gibt dann 0 zurück.
Der angegebene Server ist ja erreichbar (Sonst würde es durch kompilieren/starten auch nicht gehen).

Weiß jemand von Euch, woran das liegt? :?
BildBildBildBild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

CODE Bitte, auch wenn du denkst, das es daran nicht liegen kann, weil es ja mit PB geht.

Bei mir gehen EXEn mit OpenNetworkConnection weiterhin ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Programie
Beiträge: 1280
Registriert: 06.08.2005 22:56
Computerausstattung: https://www.sysprofile.de/id160800
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von Programie »

Hier ist der Code:

Code: Alles auswählen

#Port=6789
#Mode=0; 1 = Server, 0 = Client

InitNetwork()

CompilerIf #Mode
 If CreateNetworkServer(1,#Port)
  If OpenConsole()
   Repeat
    Select NetworkServerEvent()
     Case #PB_NetworkEvent_Connect
      PrintN("Client "+IPString(GetClientIP(EventClient()))+" connected")
     Case #PB_NetworkEvent_Disconnect
      PrintN("Client "+IPString(GetClientIP(EventClient()))+" disconnected")
    EndSelect
    Delay(10)
   ForEver
  EndIf
 EndIf
CompilerElse
 ConnectionID=OpenNetworkConnection("localhost",#Port)
  If ConnectionID
   MessageRequester("Client","Connected to server",#MB_ICONINFORMATION)
   CloseNetworkConnection(ConnectionID)
  Else
   MessageRequester("Client","Connection failed!",#MB_ICONERROR)
  EndIf
CompilerEndIf
Server kompilieren und starten bzw. Executable erstellen und starten.
Dann Client kompilieren und starten (geht bei mir) bzw. Executable erstellen und starten (geht bei mir nicht).
BildBildBildBild
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Ich habe genau das gleiche Problem gehabt und mir ist dann aufgefallen, dass wenn ich die IP auflöse es dann auch in der exe funktioniert.

Damit meine ich das "localhost" z.B. wird zu "127.0.0.1"

es gibt da auch eine kleine Prozedur ... ich glaub von Purearea hab ich die...

Ein InitNetwork wird vorrausgesetzt ;)

Code: Alles auswählen

Procedure.s Net_GetIPbyName(NameIP.s) 

  Protected TheIPAddress.s

    pHostinfo = gethostbyname_(NameIP) 
  
    If pHostinfo = 0 
      TheIPAddress = "Unable to resolve domain name" 
     Else 
  
      CopyMemory (pHostinfo, hostinfo.HOSTENT, SizeOf(HOSTENT)) 
  
      If hostinfo\h_addrtype <> #AF_INET   
        TheIPAddress = "A non-IP address was returned."   
      Else 
        While PeekL(hostinfo\h_addr_list+AdressNumber*4) 
          ipAddress = PeekL(hostinfo\h_addr_list+AdressNumber*4)  
          TheIPAddress = StrU(PeekB(ipAddress),0)+"."+StrU(PeekB(ipAddress+1),0)+"."+StrU(PeekB(ipAddress+2),0)+"."+StrU(PeekB(ipAddress+3),0)
          AdressNumber+1 
        Wend 
      EndIf 
  
    EndIf 
  
  ProcedureReturn TheIPAddress
   
EndProcedure 
und seitdem klappts...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Programie
Beiträge: 1280
Registriert: 06.08.2005 22:56
Computerausstattung: https://www.sysprofile.de/id160800
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von Programie »

Hab es jetzt mal mit "127.0.0.1" statt "localhost" probiert. Aber funktioniert immer noch nicht. :(

An was kann das noch liegen?

Ich teste es jetzt mal auf einem anderen Computer (Windows Server 2003 in VMware). ;)

//EDIT: Ok, in der VM geht es. ;) Liegt warscheinlich an Vista oder dem sch*** Comodo Internet Security. Am Wochenende kommt wieder Kaspersky Internet Security drauf. :lol:
BildBildBildBild
Antworten