OpenNetworkConnection()

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Abraham0607
Beiträge: 32
Registriert: 16.01.2012 16:38
Kontaktdaten:

OpenNetworkConnection()

Beitrag von Abraham0607 »

Ich habe ein Problem:

Ich will ein Netzwerkprogramm schreiben und habe erstmal Testprogramme zur Network-Library geschrieben. Eins das das Netzwerk hostet und eins das dem Netzwerk dann beitritt (Client). Aber irgendwas hab ich dabei falsch gemacht.
Hier beide Programm-Codes:

Der Host:

Code: Alles auswählen

InitNetwork()
CreateNetworkServer(1,80)
*Receive=AllocateMemory(5000)
OpenConsole()
Repeat
  Select Event=NetworkServerEvent()
    Case 1
      ClientID=EventClient()
      ClientIP=GetClientIP(ClientID)
      PrintN("Client <"+IPString(ClientIP)+"> ist dem Server beigetreten.")
    Case 2
      ClientID=EventClient()
      ClientIP=GetClientIP(ClientID)
      ReceiveNetworkData(ClientID,*Receive,5000)
      PrintN(IPString(ClientIP)+": "+PeekS(*Receive))
    Case 4
      ClientID=EventClient()
      ClientIP=GetClientIP(ClientID)
      PrintN("Client <"+IPString(ClientIP)+"> hat den Server verlassen.")
  EndSelect
  Command$=Input()
  If StringField(Command$,1," ")="stop"
    End
  EndIf
ForEver
Und der Client:

Code: Alles auswählen

InitNetwork()
Connection=OpenNetworkConnection("91.23.46.33",80)
*Receive=AllocateMemory(5000)
OpenConsole()
Repeat
  Command$=Input()
  If Command$
    SendNetworkString(Connection,Command$)
  EndIf
ForEver
Wenn ich jetzt beide Starte funktioniert der Server aber der Client stürzt ab wenn ich dem Server eine Nachricht schreiben will.

Bilder:

Im Code-Bereich wird das angezeigt:
Bild

Und im unteren Bereich des Fensters (keine Ahnung wie der heißt; "Debugger-Bereich?) das hier:

Bild

Ich hoffe jemand kann mir helfen...

Danke im Vorraus

Abraham
MfG Abraham

====================
Virtual Cookbook
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: OpenNetworkConnection()

Beitrag von Kiffi »

Code: Alles auswählen

Connection = OpenNetworkConnection(...

If Connection
  [...]
Else
  MessageRequester("Client", "Can't find the server")
EndIf
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Abraham0607
Beiträge: 32
Registriert: 16.01.2012 16:38
Kontaktdaten:

Re: OpenNetworkConnection()

Beitrag von Abraham0607 »

Danke, aber es funktioniert immer noch nicht...

Das Programm verbindet sich mit dem Server aber wenn

SendNetworkString(...)

aufgerufen wird kommt:

"Die Angegebene 'ConnectionID' ist null."

Trotzdem Danke
MfG Abraham

====================
Virtual Cookbook
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: OpenNetworkConnection()

Beitrag von Kiffi »

Abraham0607 hat geschrieben:Das Programm verbindet sich mit dem Server
sicher? Wenn dem so wäre, würde die Fehlermeldung
nicht erscheinen, weil Connection <> 0 ist.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Re: OpenNetworkConnection()

Beitrag von helpy »

Hallo zusammen,

Schaut Euch doch den Host-Code mal genau an!

Code: Alles auswählen

  Select Event=NetworkServerEvent()
So funktioniert das nicht! Ändern in:

Code: Alles auswählen

	Event = NetworkServerEvent()
	Select Event
Ein weiteres Problem stellt Input() dar. Hier wartet die Konsole auf eine Eingabe! D.h. die Event-Abfrage wird genau einmal durchgeführt, danach wartet das Konsolenfenster auf eine Eingabe!
Um evt. empfangene Meldungen zu lesen musst Du also immer die Enter-Taste drücken!

lg,
guido
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Benutzeravatar
Abraham0607
Beiträge: 32
Registriert: 16.01.2012 16:38
Kontaktdaten:

Re: OpenNetworkConnection()

Beitrag von Abraham0607 »

Danke, hatte n Fehler programmiert:

"If Connection=OpenNetworkConnection(...)"

geht nich.

Vielen Dank an alle!
MfG Abraham

====================
Virtual Cookbook
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: OpenNetworkConnection()

Beitrag von ts-soft »

Hab Deinen Code mal "renoviert" und bei mir funktioniert er. Mit Port 80 kann ich keinen Server aufbauen, der ist in Benutzung.

Server:

Code: Alles auswählen

EnableExplicit

If InitNetwork() = 0
  Debug "Konnte Netzwerk nicht initialisieren!"
  End
EndIf

If CreateNetworkServer(1, 8000) = 0
  Debug "Server konnte nicht erstellt werden!"
  End
EndIf

Define *Receive = AllocateMemory(5000)
Define ClientID, ClientIP, Command$

OpenConsole()
Repeat
  Select NetworkServerEvent()
    Case 1
      ClientID = EventClient()
      ClientIP = GetClientIP(ClientID)
      PrintN("Client <" + IPString(ClientIP) + "> ist dem Server beigetreten.")
    Case 2
      ClientID = EventClient()
      ClientIP = GetClientIP(ClientID)
      ReceiveNetworkData(ClientID, *Receive, 5000)
      PrintN(IPString(ClientIP) + ": " + PeekS(*Receive))
    Case 4
      ClientID = EventClient()
      ClientIP = GetClientIP(ClientID)
      PrintN("Client <" + IPString(ClientIP) + "> hat den Server verlassen.")
  EndSelect
  Command$ = Inkey()
  If Command$ = "s"
    End
  EndIf
  Delay(20)
ForEver
Client:

Code: Alles auswählen

EnableExplicit

If InitNetwork() = 0
  Debug "Konnte Netzwerk nicht initialisieren!"
  End
EndIf

Define Connection = OpenNetworkConnection("127.0.0.1", 8000)
Define Command$

OpenConsole()
Repeat
  Command$ = Input()
  If Command$ = "s"
    End
  Else
    SendNetworkString(Connection, Command$)
  EndIf
ForEver
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Re: OpenNetworkConnection()

Beitrag von Martin66119 »

Hallo und guten Tag!

Heute habe ich zum allererstenmal mit "Client" und "Server" beschäftigt und die beiden Code auf meinen Rechner kopiert. Das hat auch geklappt. Die Daten die ich eingegeben habe wurden auch auf der anderen Seite (dem anderen Fenster) angezeigt.

Was ich im Moment nicht sehe, wo steht denn die IP unter der der Server zu erreichen ist.
Kann man mit dem selben Programmteilen auch übers Internet Daten austauschen. Wenn nein, würde mich mal ein solches Beispiel interessieren.

Wie schicke ich von meinem privaten Internetanschluss an meinen eine Nachricht, die ich auch angezeigt bekomme.

Grüße
Martin
Benutzeravatar
Abraham0607
Beiträge: 32
Registriert: 16.01.2012 16:38
Kontaktdaten:

Re: OpenNetworkConnection()

Beitrag von Abraham0607 »

Also die IP kriegt der Server ganz leicht mit

Code: Alles auswählen

InitNetwork()
ExamineIPAddresses()
Debug NextIPAdress()
raus.

Ansonsten sollte das ganze auch über Internet funktionieren.
MfG Abraham

====================
Virtual Cookbook
Benutzeravatar
HeX0R
Beiträge: 3070
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: OpenNetworkConnection()

Beitrag von HeX0R »

Abraham0607 hat geschrieben:Also die IP kriegt der Server ganz leicht mit

Code: Alles auswählen

InitNetwork()
ExamineIPAddresses()
Debug NextIPAdress()
raus.
So bekommst du aber nur deine internen LAN-IPs heraus (o.k. stimmt nicht, nur eine bekommst du mit dem o.g. snippet), nicht die externe (Internet-)IP.
Dazu gibts aber nen Sack voll Codes im Board (hier z.B. die wahrscheinlich kürzeste).

Ausserdem musst du dann vermutlich noch den benutzten Port via Portweiterleitung in deinem Router durchreichen.
Antworten