Seite 2 von 2
Verfasst: 14.10.2006 15:02
von #NULL
sowas
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
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

*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