Network Frage

Anfängerfragen zum Programmieren mit PureBasic.
Defmaster
Beiträge: 130
Registriert: 26.12.2004 21:38
Kontaktdaten:

Network Frage

Beitrag von Defmaster »

Also ich und jemand anders haben uns mal an die Network funktionen rangetraut.

Nun wollen wir damit erstmal ne kleine chatsoftware machen.
Bisher funktionierte es so.
1xHost, 1xClient
Konnten wunderbar miteinander schreiben.

So...
Nun soll es so sein
1xHost, 2xClient
Der Host soll nun einfach wenn Client 1 schreibt dies an Client 2 weiter leiten,
und wenn 2 schreibt soll er es an 1 weiterleiten.

Nur weiß ich da nicht wie ich das unterscheiden soll :(

War bisher so:

Code: Alles auswählen

            text.s = GetGadgetText(#String_2)
            PokeS(buffer,text)
            If SendNetworkData(NetworkClientID() ,buffer,1000)
            SetGadgetText(#String_1,GetGadgetText(#String_1)+text+Chr(13)+Chr(10))
            EndIf 
Aber networkclientid() würde ja dann gleich wieder an den sender zurück senden, und nicht zum andern, könnt ihr mir da ein wenig unter die arme greifen?
Christi
Beiträge: 154
Registriert: 31.08.2004 14:17
Kontaktdaten:

Beitrag von Christi »

Du kannst die ID's der verbundenen Clienten z.B. in einer Liste speichern.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Siehe meine Website als Beispiel :allright:
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

schick es doch einfach an beide. also wenn client1 was schreibt wird es nicht vom client selber in das gadget eingetragen sondern erst wenn es wieder zurück geschickt wird.
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
Defmaster
Beiträge: 130
Registriert: 26.12.2004 21:38
Kontaktdaten:

Beitrag von Defmaster »

Genauso hab ichs ja auch vor ;)
Hier mal was ausgearbeitetes:

Code: Alles auswählen

    If NetworkServerEvent() = 1
      Benutzer(verbundener) = NetworkClientID() ; In Array eintragen
      verbundener = verbundener + 1 ; Beim nächstenmal den nächsten Array eintrag
    EndIf 

    If  NetworkServerEvent() = 2
        gelesen = ReceiveNetworkData(NetworkClientID(),buffer_empfang,1000)
        geschriebener_text = PeekS(buffer_empfang,gelesen)
        SetGadgetText(#String_1,GetGadgetText(#String_1)+geschriebener_text+Chr(13)+Chr(10))
        ; An alle schicken!
        For i = 0 To (verbundener-1) 
          SendNetworkData(Benutzer(i) ,buffer_empfang,1000) ; Macht er nicht
        Next
        MessageRequester("Benutzer:","Benutzer 1:"+Str(Benutzer(0))+" Benutzer 2:"+Str(Benutzer(1)))
    EndIf 
Weiß nicht aber ich speichere doch die ID's.
Dann wird bei eingehenden daten zum host die empfangenen daten zu allen verbundenen clienten geschickt, funtzt aber leider net :(
Warscheinlich wieder nur nen schussel fehler irgendwo drin.
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

mach hald einfach SendNetworkString()
das ist doch erstmal viel einfacher zu handhaben als SendNetworkData()
dann würde ich nicht ein Array nehmen sondern eine LinkedList. mit der kann man im bezug auf user in einem chat viel einfacher umgehen

Code: Alles auswählen

    If NetworkServerEvent() = 1
      AddElement(Benutzer())
      Benutzer() = NetworkClientID() ; In LL eintragen
    EndIf
    If  NetworkServerEvent() = 2
        *buffer_empfang = AllocateMemory(1000)
        gelesen = ReceiveNetworkData(NetworkClientID(),*buffer_empfang,1000)
        geschriebener_text = PeekS(*buffer_empfang,gelesen)
        SetGadgetText(#String_1,GetGadgetText(#String_1)+geschriebener_text+Chr(13)+Chr(10))
        ; An alle schicken!
        ForEach Benutzer()
          SendNetworkString(Benutzer(),geschriebener_text)
        Next
        ;MessageRequester("Benutzer:","Benutzer 1:"+Str(Benutzer(0))+" Benutzer 2:"+Str(Benutzer(1)))
    EndIf
das mit dem messagerequester müsste man jetzt anderst machen aber brauchst du das wirklich?
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
Defmaster
Beiträge: 130
Registriert: 26.12.2004 21:38
Kontaktdaten:

Beitrag von Defmaster »

Nein das mit dem requester war nur zum etsten.

Aber es klappt bei mir dennoch nicht :(
Mit deinem Code.
Er sendet es einfach nicht zu den clienten zurück *heulundverzweifel*
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

benutzt du windowevent oder waitwindowevent?
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
Defmaster
Beiträge: 130
Registriert: 26.12.2004 21:38
Kontaktdaten:

Beitrag von Defmaster »

ich nutz WaitWindowEvent()
lasse dann per selct abfragen ob menü,knopf ... gedrückt wird
und bevor schleife wiederholt werden halt einkommende daten abgefragt.
(Der Code oben halt)

So habs nun mit windowevent() gemacht und jetze gehts danke dafür :)
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

jetzt musst du aber noch ein delay einbauen:

Code: Alles auswählen

Delay(1)
sonst hat das programm eine CPU auslastung von 100%
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
Antworten