Client + Server

Anfängerfragen zum Programmieren mit PureBasic.
Salami
Beiträge: 41
Registriert: 18.02.2005 09:42
Kontaktdaten:

Client + Server

Beitrag von Salami »

Also ich wollte ein Programm machen, bei dem man über den Client den Server steuern kann. Aber irgendwie will das nicht so ganz funktionieren...
Es soll beim server eigentlich eine Nachricht mit dem Namen "hallo" aufpoppen also in einem messagerequester. Ich bekomme aber immer ein leeres alert endlos lange bis ich den clienten schliesse. Hab keine Ahnung was ich falsch mache.... :?

Hier mal der Code:

Server.exe:

Code: Alles auswählen

OpenWindow(0, 200, 200, 300, 70, #PB_Window_SystemMenu, "Server")

If InitNetwork() = 0
  End
EndIf
socket.l = CreateNetworkServer(6500)
If socket = 0
  End
EndIf

Repeat
  EventID=WaitWindowEvent()
  
  If NetworkServerEvent() = 2
    nachricht$="   "
    ReceiveNetworkData(socket, @nachricht$, 500)
    MessageRequester("Meldung", nachricht$, 0)
  EndIf
  
  If EventID=#PB_EventCloseWindow
    exit=1
  EndIf
  
Until exit=1
End
Client.exe:

Code: Alles auswählen

OpenWindow(0, 0, 0, 300, 200, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "Network Client")
CreateGadgetList(WindowID())
StringGadget(0, 5, 5, 200, 20, "IP")
ButtonGadget(1, 5, 25, 100, 20, "Verbinden!")
ButtonGadget(2, 5, 50, 100, 20, "PopUp")

Repeat

  EventID=WaitWindowEvent()
  
  If InitNetwork()=0
    MessageRequester("Kein Netzwerk", "Kein Netzwerk gefunden", 0)
  EndIf

  If EventID=#PB_Event_Gadget
    If EventGadgetID()=1
      ConnID.l = OpenNetworkConnection(GetGadgetText(0),6500)
      If ConnID = 0
        MessageRequester("Kein Server", "Kein Server läuft unter dieser Adresse", 0)
      Else
        MessageRequester("Verbunden", "Erfolgreich zum Server verbunden!", 0)
      EndIf
    EndIf

    If EventGadgetID()=2
      nachricht$ = "hallo"
      SendNetworkData(ConnID, @nachricht$, Len(nachricht$))
      Delay(1000)
    EndIf
  EndIf

  If EventID = #PB_EventCloseWindow: exit=1: EndIf
  
Until exit=1
End
Ausserdem weis ich nicht wann man genau ein @ vor eine Variable stellt und was der unterschied zwischen variable$ und variable.s ist...
Ich hab mir Server und Client aus dem Purearea.de Codearchiv genommen und einige zeilen mehr oder weniger abgeschrieben.. eigentlich versteh ich das ganze schon ausser den variablen...

danke
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

kann dir momentan nur die Frage mit den variablen beantworten:
string.s und string$ sind 2 verschiebene Variablen, die Endungen definieren aber den selben Typ.

@ gibt einen Zeiger auf diese Variable oder Prozedur zurück.
Muss man immer hinschreiben, wenn bei der Syntax des Befehls irgendwas mit * als Parameter steht (also Beispielsweise BeispielProc(*hnd)

Der Letzte Absatz nur unter Vorbehalt! Damit kenn ich mich nicht aus.
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Code: Alles auswählen

  If NetworkServerEvent() = 2
    nachricht$="   "
    ReceiveNetworkData(socket, @nachricht$, 500)
    MessageRequester("Meldung", nachricht$, 0)
  EndIf 
Na, das ist aber so nicht ganz richtig :lol:. Wenn du der Prozedur sagst, dass in der Variable 500 Zeichen frei sind, dann musste auch wirklich die 500 Zeichen frei machen. Mach es doch einfach so: nachricht$= space(500). Space() füllt eine Variable beliebig viel mit Leerzeichen.
Bild
Salami
Beiträge: 41
Registriert: 18.02.2005 09:42
Kontaktdaten:

Beitrag von Salami »

Ok danke...
Jetzt kommt ein großes leeres alert^^ (oder eben mit leerzeichen gefüllt)
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Versuch mal das:

Code: Alles auswählen

  If NetworkServerEvent() = 2
    nachricht$=Space(500)
    ReceiveNetworkData(socket, @nachricht$, 500)
    if trim(nachricht$) <> ""
        MessageRequester("Meldung", nachricht$, 0)
    endif
  EndIf 
Bild
Salami
Beiträge: 41
Registriert: 18.02.2005 09:42
Kontaktdaten:

Beitrag von Salami »

Hm.. es ist schon besser... jetzt kommt garnichts - irgendwie kommt meine nachricht nicht durch...
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Ehm, hab den Fehler :|. Versuch mal das :D:

Code: Alles auswählen

  If NetworkServerEvent() = 2
    nachricht$=Space(500)
    ReceiveNetworkData(NetworkClientID(), @nachricht$, 500)
    if trim(nachricht$) <> ""
        MessageRequester("Meldung", nachricht$, 0)
    endif
  EndIf
Problem war dass wir den Socket vom Server auf Nachrichten überprüft haben. Aber wenn der Client connectet bekommt er nochmal eine eigene ID auf dem die Daten dann liegen. Die ID kann man dann mit NetworkClientID() abrufen.
Bild
Salami
Beiträge: 41
Registriert: 18.02.2005 09:42
Kontaktdaten:

Beitrag von Salami »

THX geht wunderbar :D
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Ich hoffe, dass du auch verstanden hast wo der fehler lag ;).
Bild
Antworten