TCP Stream zuordnen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Yuen

Betreff: TCP Stream zuordnen

BeitragMo, Jun 19, 2006 10:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich arbeite an einem Online-Spiel und soweit läufts auch ganz gut.
Testweise nutze ich TCP und habe mir einen kleinen primitiven Server in B3D gebastelt(Client auch in B3D).

Der Server läuft soweit so gut, ich würde nur gern wissen, wie ich meine Client's zuordnen kann ? - Testweise habe ich es so eingestellt, dass wenn man im Client eine Maustaste drückt, auf dem Server "Test" erscheint. Das funktioniert auch mit mehreren Clients ganz gut. Jedoch habe ich dann immer untereinander einfach nur "Test" stehen und nicht woher es kommt.

Gibt es eine Möglichkeit, das mir die IP des Clients angezeigt wird(in UPD geht das doch glaub ich) ? - Oder muß ich bei der Clientprogrammierung, dem Client einen Namen geben und er sendet den Namen+Nachricht ?

MFG
Yuen

etlam

BeitragMo, Jun 19, 2006 11:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
wenn ich die Frage richtig verstanden habe, müsste es so gehen:
Server:
Code: [AUSKLAPPEN]

;server
server=CreateTCPServer(477)
Repeat
strrea = AcceptTCPStream(server)
If stream Then
ip_1 = TCPStreamIP(stream)
ip$ = DottedIP(ip_1)
Print ip$
EndIf
Forever

Client:
Code: [AUSKLAPPEN]

st = OpenTCPStream("127.0.0.1",477)
End

Mit TCPStreamIP(stream) erhält man irgendetwas komisches wie "2130706433", damit man eine normale IP bekommt, muss man DottedIP(ip_1) machen, was dann "2130706433" in "127.0.0.1" umwandelt.

Ich hoffe, ich konnte dir helfen,

etlam

Jolinah

BeitragMo, Jun 19, 2006 11:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Edit: Zu spät Wink

Mit TCPStreamIP(stream) bekommst du eine Integer-IP des Clients. Dem Client einen Nicknamen zuordnen ist aber bestimmt übersichtlicher, die Spieler wollen sich später wahrscheinlich keine IPs merken Smile Ausserdem könnten mehrere Clients die Selbe IP haben, wenn sie hinter einem Router sitzen.

Yuen

BeitragDi, Jun 20, 2006 9:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal THX für die Antwort, das mit der IP funktioniert sehr gut.

Die Sache ist die, der Client sendet eine Nachricht an den Server und der Server sendet eine Nachricht zurück. Dementsprechend muß zugeordnet werden von wo, welche Nachricht kam.
Da alle Nachrichten in einem einzigen Stream ankommen und abgehen, brauche ich eine Zuordnung.

Ein Problem tritt wohl dann auf, wenn mehrere Personen die gleiche IP haben.

D2006

Administrator

BeitragDi, Jun 20, 2006 11:12
Antworten mit Zitat
Benutzer-Profile anzeigen
~VERSCHOBEN~
Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde.


MfG
D2006
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Goodjee

BeitragDi, Jun 20, 2006 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
leute mit gleicher ip kommen nicht auf den server...
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

BtbN

BeitragDi, Jun 20, 2006 14:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei TCP kommen die Nachrichten nicht in einem einigen Stream an!
Du hast für jeden Clienten einen eigenen Stream.

Bei UDP ist das was anderes, da ist nur ein Stream. Dort kannst du anhand Port und IP die User seperieren.

Yuen

BeitragDi, Jun 20, 2006 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei TCP hab ich doch auch nur einen Stream. Wenn ich den Server starte und dann zwei Client's und die Client's dann beide Test senden, erscheint Test untereinander, Print wird nur für einen Stream verwendet. Der Server aktzeptiert doch nur einen Stream, also senden alle Clients in diesen Stream.

BtbN

BeitragDi, Jun 20, 2006 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Das AcceptStream akzeptiert einen Clienten.
Du erhälst als Rückgabe entweder 0 oder einen neuen Stream.
Und jeder Stream ist für genau einen Clienten.

Yuen

BeitragDi, Jun 20, 2006 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
hmmm verstehe, und wie mache ich diesen Stream "sichtbar" ? - ich meine wie kann ich ihn darstellen oder auswerten ? - so dass ich eine Information zurücksenden(an den Client) kann ?

Yuen

BeitragDo, Jun 22, 2006 10:41
Antworten mit Zitat
Benutzer-Profile anzeigen
kann mir denn keiner helfen ? - ich kann Informationen von den Client's an den Server senden, wie kann ich denn nun Informationen vom Server an die einzelnen Client's senden ?

Lunatix

BeitragDo, Jun 22, 2006 12:50
Antworten mit Zitat
Benutzer-Profile anzeigen
mit Types

Code: [AUSKLAPPEN]


Type Client
 field Stream
end type

stream = AcceptTcpStream()
if Stream <> 0
 C.Client = new Client
 C\Stream = Stream
 Stream = 0
endif



So in etwa Very Happy
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...

Yuen

BeitragDo, Jun 22, 2006 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
und wie kann ich damit Informationen an die einzelnen Client's senden ?

Lunatix

BeitragDo, Jun 22, 2006 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
grmpf!

na mit Code: [AUSKLAPPEN]


For C.Client = each Client

 if ReadAvail(C\Ctream) <> 0
  blubb
 endif

next



so halt in der art
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...

BtbN

BeitragDo, Jun 22, 2006 17:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Indem du in den Stream aus dem due die Daten des Clienbts list einfach schreibst.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group