Seite 1 von 1

OpenNetworkConnection()

Verfasst: 31.01.2012 15:07
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

Re: OpenNetworkConnection()

Verfasst: 31.01.2012 15:51
von Kiffi

Code: Alles auswählen

Connection = OpenNetworkConnection(...

If Connection
  [...]
Else
  MessageRequester("Client", "Can't find the server")
EndIf
Grüße ... Kiffi

Re: OpenNetworkConnection()

Verfasst: 31.01.2012 16:41
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

Re: OpenNetworkConnection()

Verfasst: 31.01.2012 17:12
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

Re: OpenNetworkConnection()

Verfasst: 31.01.2012 18:15
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

Re: OpenNetworkConnection()

Verfasst: 01.02.2012 15:11
von Abraham0607
Danke, hatte n Fehler programmiert:

"If Connection=OpenNetworkConnection(...)"

geht nich.

Vielen Dank an alle!

Re: OpenNetworkConnection()

Verfasst: 01.02.2012 15:40
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

Re: OpenNetworkConnection()

Verfasst: 19.03.2012 15:37
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

Re: OpenNetworkConnection()

Verfasst: 28.03.2012 16:07
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.

Re: OpenNetworkConnection()

Verfasst: 28.03.2012 17:12
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.