TCP: Kapier ich nicht

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Mashed Crashed

Betreff: TCP: Kapier ich nicht

BeitragMo, Feb 26, 2007 22:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Moinmoin,
der Titel sagt es schon, ich hab sämtliches Material was ich gefunden hab gelesen und versucht es zu kapieren, leider ohne Erfolg.

Ok, ich möchte eigentlich was ganz "simples" machen. Zwei PC's per Inet verbinden und dann einfach per einen tastendruck eine Datei übertragen.Mit Directplay hab ich schon Erfahrung, nur da geht das mit Dateien net, UDP kann ich net ausprobeiren da ich 1 Port net 2mal gleichzeitig nutzen kann.

Mir erschien es also an sinnvollsten das mit TCP zumachen da es kein Spiel wird sondern ein Programm mit dem man alle möglichen dateien übertragen kann.

Hoffer wer kann mir helfen Wink

EDIT: Tutorial oder Erklärung wären gut Wink

Hummelpups

BeitragMo, Feb 26, 2007 23:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie sollen wir dir helfen wenn du schon sämtliches Material gelesen
und versucht hast zu verstehen?

Warte 5 Jährchen und dann lies es noch mal, bis dahin versuch was anderes
als nen Filesharingprogramm zu Coden.

IMurDOOM
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus

PowerProgrammer

BeitragDi, Feb 27, 2007 7:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Was soll man dennn da nicht verstehen?

Ich glaube, da mangelt es nicht an deinen Tutorials, sondern an deinen Kenntnissen des Netzwerks.

Zitat:
da ich 1 Port net 2mal gleichzeitig nutzen kann

Angenommen, das nehmen wir mal so einfach hin, dann verstehe ich nicht, warum du nicht einfach noch nen anderen Port nimmst.


Ich glaube IMurDOOM hat vollkommen recht. Du solltest einfach mal was anderes machen und dir eventuell in deiner Bücherei ein paar Bücher ausleihen. 5 Jahre sind etwas übertrieben, oft reicht ein halbes Jahr. Tipp: TCP/IP für Dummies
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter!
 

Yogu

BeitragDi, Feb 27, 2007 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
CodeMaster hat folgendes geschrieben (In "tcp-tut gesucht"):
Zitat:

Code: [AUSKLAPPEN]
; SERVER

;-- Netzwerkprotokoll ----------

Const cmd_login = 1
Const cmd_login_passed = 2
Const cmd_login_failed = 3
Const cmd_ping = 4
Const cmd_chat = 5
Const cmd_logout = 6

;-- Servereinstellungen --------

Global Port% = 4040
Global Name$ = "Testserver"
Global Stream%
Global PingTime% = 1000
Global CurrentPingTime%
Global TimeoutTime% = 10000

;-- Clienteinstellungen --------

Type TClient
  Field Stream%
  Field Name$
  Field IP$
  Field Port%
  Field Active%
  Field Ping%
End Type

;-- Server einrichten ----------

Stream = CreateTCPServer(Port)
If Not Stream Then Color 255,100,100 : Print "Netzwerkfehler!" : Delay 1000 : End

Color 100,255,100
Print "TCP-Server eingerichtet."
Print "Warte auf Clients."




;-- Hauptschleife --------------




While Not KeyDown(1)

  ;-- Server-Runtime -----------
  ClientStream = AcceptTCPStream(Stream)
  If ClientStream Then
    NewClient.TClient = New TClient
    NewClient\Stream = ClientStream
    NewClient\IP$ = DottedIP(TCPStreamIP(ClientStream))
    NewClient\Port = TCPStreamPort(ClientStream)
    NewClient\Ping = MilliSecs()
    NewClient\Active = False
  EndIf
  ;-- EMPFANGEN ----------------
  For TmpClient.TClient = Each TClient
    If MilliSecs() - TmpClient\Ping > TimeoutTime Then
      ;-- TIMEOUT --------------
      Color 255,100,100
      Print CurrentTime() + " " + TmpClient\Name + " verlässt den Raum (Timeout)."
      Delete TmpClient
    Else
      If MilliSecs() - CurrentPingTime > PingTime Then
        WriteByte TmpClient\Stream, cmd_ping
        CurrentPingTime = MilliSecs()
      EndIf
      While ReadAvail(TmpClient\Stream)
        action = ReadByte(TmpClient\Stream)
        Select action
          Case cmd_ping
            TmpClient\Ping = MilliSecs()
          Case cmd_login
            ClientName$ = ReadString(TmpClient\Stream)
            TmpClient\Name = ClientName
            TmpClient\Active = True
            WriteByte TmpClient\Stream, cmd_login_passed
            WriteString TmpClient\Stream, Name$
            Color 100,255,100
            Print CurrentTime() + " " + TmpClient\Name + " betritt den Raum."
          Case cmd_chat
            Message$ = ReadString(TmpClient\Stream)
            Color 100,200,255
            Print CurrentTime() + " " + TmpClient\Name + ": " + Message$
          Case cmd_logout
            Color 255,100,100
            Print CurrentTime() + " " + TmpClient\Name + " verlässt den Raum."
            Delete TmpClient
            Exit
        End Select
      Wend
    EndIf
  Next
  ;-- SENDEN -------------------
  If KeyHit(57) Then
    Message$ = "Hallo Clients!"
    Color 255,200,100
    Print CurrentTime() + " " + Name$ + ": " + Message$
    For TmpClient.TClient = Each TClient
      WriteByte TmpClient\Stream, cmd_chat
      WriteString TmpClient\Stream, Message$
    Next
  EndIf

Wend

;CloseTCPServer(Stream)

End


Code: [AUSKLAPPEN]

; CLIENT

;-- Netzwerkprotokoll ----------

Const cmd_login = 1
Const cmd_login_passed = 2
Const cmd_login_failed = 3
Const cmd_ping = 4
Const cmd_chat = 5
Const cmd_logout = 6

;-- Servereinstellungen --------

Global IP$ = "127.0.0.1"
Global port% = 4040
Global ping%
Global TimeoutTime% = 10000
Global ServerName$

;-- Clienteinstellungen --------

Global Name$ = "Testclient"
Global Stream%

;-- Verbindung herstellen ------

Stream = OpenTCPStream(IP$,port)
If Not Stream Then Color 255,100,100 : Print "Netzwerkfehler!" : Delay 1000 : End

Color 100,255,100
Print "Verbindung zum Server hergestellt."
Print "Login..."

;-- Beim Server anmelden -------

WriteByte Stream, cmd_login
WriteString Stream, Name

ping = MilliSecs()
status = 0

While Not status
  If ReadAvail(Stream)
    action = ReadByte(Stream)
    Select action
      Case cmd_ping
        WriteByte Stream, cmd_ping
        ping = MilliSecs()
      Case cmd_login_passed
        status = 1
        ServerName = ReadString(Stream)
      Case cmd_login_failed
        status = -1
        ;reason$ = ReadString(Stream)  ;z.b. zu viele User, IP gesperrt usw.
    End Select
  EndIf
  Delay 100
Wend

Color 255,100,100
If status = 0 Then Print "Keine Antwort." : Delay 1000 : CloseTCPStream(Stream) : End
If status = -1 Then Print "Keine Authorisierung." : Delay 1000 : CloseTCPStream(Stream) : End

Color 100,255,100
Print "Erfolgreich eingeloggt."
ping = MilliSecs()




;-- Hauptschleife --------------




While Not KeyDown(1)

  ;-- Client-Runtime -----------
  If MilliSecs() - ping > TimeoutTime Then
    ;-- TIMEOUT ----------------
    Color 255,100,100
    Print "Timeout des Servers"
    CloseTCPStream(Stream)
    Delay 1000
    End
  Else
    ;-- EMPFANGEN --------------
    While ReadAvail(Stream)
      action = ReadByte(Stream)
      Select action
        Case cmd_ping
          ping = MilliSecs()
          WriteByte Stream, cmd_ping
        Case cmd_chat
          Message$ = ReadString(Stream)
          Color 100,200,255
          Print CurrentTime() + " " + ServerName + ": " + Message$
      End Select
    Wend
    ;-- SENDEN -----------------
    If KeyHit(57) Then
      Message$ = "Hallo großer Server!"
      Color 255,200,100
      Print CurrentTime() + " " + Name + ": " + Message$
      WriteByte Stream, cmd_chat
      WriteString Stream, Message$
    EndIf
  EndIf

Wend

WriteByte Stream, cmd_logout

CloseTCPStream(Stream)

End


Das hilft dir sicher weiter. Mich hat es zum Erfolg gebracht!
 

Mashed Crashed

BeitragDi, Feb 27, 2007 23:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo danke, da haben sich einige Fragen geklärt Wink
(und ein danke an Codemaster Wink

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group