Seite 2 von 2

Verfasst: 14.10.2006 15:02
von #NULL
sowas

Code: Alles auswählen

client = GetClientIP(Client)
ist ungünstig. benutze, verschiedene variablen für verschiedene dinge, sonst ist vielleicht nie richtig sicher, ob in client nun die ID oder die IP steckt :wink:
außerdem, sind Client und client die selbe variable (PB ist nicht case-sensitive). ich hoffe das weißt du bereits, ist aber übersichtlicher es im code auch gleich zu schreiben.
der paramterer 'Verbindung' (wird in der hilfe auch einfach 'Client' gennant) ist bei SendNetworkData() genauso wie bei ReceiveNetworkData().
bei ReceiveN...() hast du die ClientID ja durch EventClient() erhalten, nach dem du ein #PB_NetworkEvent_Data bemerkt hast.
wenn du jetzt einem Client etwas schicken willst, mußt du dessen ID raussuchen, die du dir gespeichert hattest (nach einem #PB_NetworkEvent_Connect und EventClient() )

Code: Alles auswählen

for i=0 to max
  if user(i)\name="the one that you what schicken willst"
    check=sendnetworkdata( user(i)\clientID, ... , ... )
    break
  endif
next

wobei es in deiner structure z.b. ein clientID.l gibt (unabhängig von einem clientIP.l oder dergleichen)


*..später*
>>welches davon ist jetzt richtig?
keines. für keine der fälle sind floats/double erforderlich oder sinnvoll.
du brauchst long, sonst nichts.

Verfasst: 14.10.2006 15:18
von Brügge
lol das funzt alles nicht :cry: *verzweifelt biz* also der server hat ERFOLGREICH die message vom client erhalten. das habe ich so gemacht:

Code: Alles auswählen

  ReceiveNetworkData(client, *Buffer, 300)    
  Text$ = PeekS(*Buffer,300)
das klappt jetzt muss doch auch dieses klappen oder?

Code: Alles auswählen

  ReceiveNetworkData(client, *Buffer, 300)    
  Text$ = PeekS(*Buffer,300)
  SendNetworkData(client, *Buffer, 300)
allerdings funktioniert das nicht also der erhält den text richtig aber der verschickt nix ich habe bedesmal (hintereinander) die gleiche variable benutzt also habe ich sie in der kurzen zeit nicht verändert. der buffer muss auch noch voll sein also muss es doch gehen oder?

Verfasst: 14.10.2006 15:21
von Brügge
einen moment vll liegt das problem nicht am server sondern am client...

um zu gucken ob eine datei oder roh-daten übermittelt wurden muss man als client doch den befehl NetworkClientEvent(Verbindung) oder?

Verfasst: 14.10.2006 15:24
von mknjc
Ohne es zu Testen:
Vieleicht geht es einfach nicht da du erst wieder eine Eventabfrage machen musst.

Also erst in der Hauptschleife gucken ob daten da sind
Wenn ja eine Variable setzen.
Und beim nächsten schleifendurchlauf gucken ob die Variable gesetzt ist und dann den String senden.

Mfg mknjc

Verfasst: 14.10.2006 15:33
von Brügge
@mknjc

meinst du beim client oder beil server? also ich kann euch den client kurz reinschreiben:

Code: Alles auswählen

 Ergebnis = NetworkServerEvent() 
    
    If ergebnis = 1
      Debug("dateien wurden empfangen")
      ReceiveNetworkData(Verbindung, *buffer,300)
      Text$ = PeekS(*Buffer)
      Debug (text$)
    EndIf
ich bin mir nicht sicher, ob ich NetworkServerEvent() oder NetworkClientEvent nutzen soll aber beides geht im moment nicht :(

Verfasst: 14.10.2006 16:16
von #NULL
im serverprogramm erhälts du die netzwerk-events für den erstellten server mit NetworkServerEvent(). und auf client-seite erhältst du die events mit NetworkClientEvent(verbindung), wobei du verbindung durch
Verbindung=OpenNetworkConnection(ServerName$, Port [, Modus])
erhalten hast, als du deinen client mit dem server verbunden hast.
(die hilfe redet hier seltsamerweise wieder von 'Client-Port '. das ist nicht richtig. gemeint ist ist die verbindungs-ID.
in 3.94 hieß das 'ConnectionID'. auf jeden fall ist das auf client-seite der rückgabewert von OpenNetworkConnection(..) [...'verbindung' entspricht auf serverseite der clientID.]

Verfasst: 14.10.2006 16:16
von mknjc
So hab ma eben was Programmiert:

(Man brauch doch nich die Events abarbeiten)

Der Client:

Code: Alles auswählen

If InitNetwork() = 0
    MessageRequester("Error", "Can't initialize the network !", 0)
    End
EndIf

Port = 6832

Buffer = AllocateMemory(1000)

ConnectionID = OpenNetworkConnection("127.0.0.1", Port)
If ConnectionID
    MessageRequester("PureBasic - Client", "Client connected to server...", 0)
    
    SendNetworkString(ConnectionID, "Connect?")
    
    Repeat
        
        CEvent = NetworkClientEvent(ConnectionID)
        
        If CEvent = 2
            ReceiveNetworkData(ConnectionID, Buffer, 1000)
            If PeekS(Buffer) = "Connect!"
                MessageRequester("Client", "OK", 0)
                Quit = 1
            EndIf
            
        EndIf
        Delay(1)
        
    Until Quit = 1 
    
    
    CloseNetworkConnection(ConnectionID)
Else
    MessageRequester("PureBasic - Client", "Can't find the server (Is it launched ?).", 0)
EndIf
  
End  
Der Server

Code: Alles auswählen

If InitNetwork() = 0
    MessageRequester("Error", "Can't initialize the network !", 0)
    End
EndIf

Port = 6832
Buffer = AllocateMemory(1000)

If CreateNetworkServer(0, Port)
    
    MessageRequester("PureBasic - Server", "Server created (Port "+Str(Port)+").", 0)
    
    Repeat
        
        SEvent = NetworkServerEvent()
        
        If SEvent
            
            ClientID = EventClient()
            
            Select SEvent
                
                Case 1
                    MessageRequester("PureBasic - Server", "A new client has connected !", 0)
                    
                Case 2
                    ReceiveNetworkData(ClientID, Buffer, 1000)
                    Debug PeekS(Buffer)
                    If PeekS(Buffer) = "Connect?"
                        MessageRequester("Client: "+Str(ClientID), "Connect?", 0)
                        SendNetworkString(ClientID, "Connect!")
                    EndIf
                Case 4
                    MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has closed the connexion...", 0)
                    Quit = 1
                    
            EndSelect
        EndIf
        Delay(1)
    Until Quit = 1 
    
    MessageRequester("PureBasic - Server", "Click to quit the server.", 0)
    
    CloseNetworkServer(0)
Else
    MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf

  
End  
Mfg mknjc

Verfasst: 14.10.2006 18:57
von mk-soft
Kommt da rauf an wie fit du schon in pb bist.

http://www.purebasic.fr/german/viewtopi ... highlight=