Probleme mit meinem Chat?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

bruce85

Betreff: Probleme mit meinem Chat?

BeitragFr, Feb 23, 2007 13:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich bin gerade dabei einen Chat zu schreiben, leider bekommt der Server oder der Client nix, wenn ich etwas abschicke.
Ich habe 2 BB Dateien, also einmal Server.bb und einmal Client.bb.
Jetzt wollte ich mal wissen, ob es überhaupt so gehen kann die 2 Dateien getrennt zu benutzen?
Eigentlich müsste es ja funktionieren, also der Server wird positiv gestartet und der Client wird positiv gestartet, nur wenn ich eine Nachricht schreibe, dann kommt es nie an, zum Server oder Client.
Ich habe es erst local getestet, also mit der IP 127.0.0.1 um es erstmal zu testen.

Wenn es eigentlich so gehen müsste, dann poste ich mal den Quellcode.

Danke euch schonmal für die hilfe.

MfG Andreas
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

Tankbuster

BeitragFr, Feb 23, 2007 16:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Natürlich geht das! Wenn du aber mit UDp arbeitest, musst du die IP als Integer eingeben!
Twitter
Download Jewel Snake!
Windows|Android

The_Nici

BeitragFr, Feb 23, 2007 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Bau mal in den Server ein das die Nachrichten, die angekommen sind angezeigt werden, dann weisst du ob es am Client ders verschickt oder am Server ders weiterleitet liegt.

Tankbuster

BeitragFr, Feb 23, 2007 18:48
Antworten mit Zitat
Benutzer-Profile anzeigen
So schlau müsste selbst mein 6 jähriger (nichtexistierender) Bruder sein!
Twitter
Download Jewel Snake!
Windows|Android
 

bruce85

BeitragFr, Feb 23, 2007 20:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke euch.
Ich arbeite gerade mit TCP Protokol.
Ich habe alles richtig definiert, aber es kommt nie an, es zeigt auch kein Fehler an oder so.
Hier mal der Code:

Server.bb
Code: [AUSKLAPPEN]
Graphics 640,480,16,2
SetBuffer BackBuffer()

AppTitle "Server"

Global schrift1 = LoadFont("Arial",16,0,0,0)
Global schrift2 = LoadFont("Arial",16,0,1,0)

Global i=30
Global ClientStream
Global ClientNick$="bruce85"
Global Eingabe$

Type texte
  Field tex$
  Field tex_x
  Field tex_y
  Field schrift
  Field tex_red
  Field tex_green
  Field tex_blue
End Type

Global Server = CreateTCPServer(8000)

If Server <> 0 Then
  t.texte = New texte
  t\tex$ = "<" + CurrentTime() + "> " + "Server wurde erfolgreich gestartet."
  t\tex_x = 30
  t\tex_y = i
  i = i + 20
  t\schrift = schrift2
  t\tex_red = 0 : t\tex_green = 100 : t\tex_blue = 100
Else
  t.texte = New texte
  t\tex$ = "Fehler beim erstellen des Servers."
  t\tex_x = 30
  t\tex_y = i
  i = i + 20
  t\schrift = schrift1
  t\tex_red = 100 : t\tex_green = 0 : t\tex_blue = 0
EndIf

Type client
  Field stream
  Field ip_adresse$
  Field port_adresse%
  Field name$
End Type

ClsColor 127,127,127
Repeat
  Cls

  ClientStream = AcceptTCPStream(Server)

  If ClientStream Then
    c.client = New client
    c\stream = ClientStream
    c\ip_adresse$ = DottedIP(TCPStreamIP(ClientStream))
    c\port_adresse% = TCPStreamPort(ClientStream)
  EndIf
  ;Wenn der Client etwas abgeschickt hat, dann ausführen
  For c.client = Each client
    While ReadAvail(c\stream)
      action = ReadString(c\stream)
      Select action
        Case 1
          ClientNick$ = ReadString(c\stream)
          c\name$ = ClientNick$
          t.texte = New texte
          t\tex$ = c\name$ + " betritt den Chat."
          t\tex_x = 30
          t\tex_y = i
          i = i + 20
          t\schrift = schrift1
          t\tex_red = 0 : t\tex_green = 100 : t\tex_blue = 0
        Case 2
          Message$ = ReadString(c\stream)
          c\name$ = ClientNick$
          t.texte = New texte
          t\tex$ = c\name$ + ": " + Message$
          t\tex_x = 30
          t\tex_y = i
          i = i + 20
          t\schrift = schrift1
          t\tex_red = 0 : t\tex_green = 100 : t\tex_blue = 0
      End Select
    Wend
  Next

  For t.texte = Each texte
    SetFont t\schrift
    Color t\tex_red,t\tex_green,t\tex_blue
    Text t\tex_x,t\tex_y,t\tex$
  Next

  InputFunktion()

  If KeyDown(28) And KeyHit(28) Then
      Message$ = Eingabe$
      t.texte = New texte
      t\tex$ = ClientNick$ + ": " + Message$
      t\tex_x = 30
      t\tex_y = i
      i = i + 20
      t\schrift = schrift1
      t\tex_red = 0 : t\tex_green = 0 : t\tex_blue = 128
      For c.client = Each client
        WriteByte c\stream,2
        WriteString c\stream,Message$
      Next
      Message$=""
    EndIf

  Flip
Until KeyHit(1)

End

Function InputFunktion()

  b$ = GetKey()

  If b > 0 Then
    If Not b = 8 Then
      If Not b = 13 Then
        Eingabe$ = Eingabe$ + Chr$(b$)
      EndIf
    EndIf
  EndIf

  If b = 8 Then
    Eingabe$ = Mid(Eingabe$,1,Len(Eingabe$)-1)
  EndIf

  Text 30,400,Eingabe$

End Function


Client.bb
Code: [AUSKLAPPEN]
Graphics 640,480,16,2
SetBuffer BackBuffer()

AppTitle "Client"

Global schrift1 = LoadFont("Arial",16,0,0,0)
Global schrift2 = LoadFont("Arial",16,0,1,0)

Global i=30
Global ClientNick$ = "bruce85"
Global Stream
Global Eingabe$

Type texte
  Field tex$
  Field tex_x
  Field tex_y
  Field schrift
  Field tex_red
  Field tex_green
  Field tex_blue
End Type

Stream = OpenTCPStream("127.0.0.1",8000)

If Stream <> 0 Then
  t.texte = New texte
  t\tex$ = "<" + CurrentTime() + "> " + "Erfolgreich zum Server verbunden."
  t\tex_x = 30
  t\tex_y = i
  i = i + 20
  t\schrift = schrift2
  t\tex_red = 0 : t\tex_green = 100 : t\tex_blue = 100
  ;beim server anmelden
  WriteByte Stream,1
  WriteString Stream,ClientNick$
Else
  t.texte = New texte
  t\tex$ = "Fehler beim verbinden zum Server."
  t\tex_x = 30
  t\tex_y = i
  i = i + 20
  t\schrift = schrift1
  t\tex_red = 100 : t\tex_green = 0 : t\tex_blue = 0
EndIf

ClsColor 127,127,127
Repeat
  Cls

  ;Wenn der Server etwas abgeschickt hat, dann ausführen
  While ReadAvail(Stream)
    action = ReadByte(Stream)
    Select action
      Case 2
        Message$ = ReadString(Stream)
        t.texte = New texte
        t\tex$ = ServerNick$ + ": " + Message$
        t\tex_x = 30
        t\tex_y = i
        i = i + 20
        t\schrift = schrift1
        t\tex_red = 0 : t\tex_green = 100 : t\tex_blue = 0
    End Select
  Wend

  If Not Eingabe = "" Then
    If KeyHit(28) And KeyDown(28) Then
      Message$ = Eingabe$
      t.texte = New texte
      t\tex$ = ClientNick$ + ": " + Message$
      t\tex_x = 30
      t\tex_y = i
      i = i + 20
      t\schrift = schrift1
      t\tex_red = 0 : t\tex_green = 0 : t\tex_blue = 128
      WriteByte Stream,2
      WriteString Stream,Message$
      Eingabe$=""
    EndIf
  EndIf

  For t.texte = Each texte
    SetFont t\schrift
    Color t\tex_red,t\tex_green,t\tex_blue
    Text t\tex_x,t\tex_y,t\tex$
  Next

  InputFunktion()

  Flip
Until KeyHit(1)

End

Function InputFunktion()

  b$ = GetKey()

  If b > 0 Then
    If Not b = 8 Then
      If Not b = 13 Then
        Eingabe$ = Eingabe$ + Chr$(b$)
      EndIf
    EndIf
  EndIf

  If b = 8 Then
    Eingabe$ = Mid(Eingabe$,1,Len(Eingabe$)-1)
  EndIf

  Text 30,400,Eingabe$

End Function


Hab ich vieleicht etwas falsch gemacht?

MfG Andreas
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

StepTiger

BeitragFr, Feb 23, 2007 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
ja

action ist ein integer, soll aber einen string lesen. (siehe server code)
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

bruce85

BeitragFr, Feb 23, 2007 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke dir StepTiger, ich habe das so machen müssen:

Code: [AUSKLAPPEN]
action$ = ReadByte(Stream)


also die Bytes lesen, jetzt geht das.

EDIT: Ich hab noch ein kleines problem und zwar, wenn ich jetzt zu testen auf 1 Rechner einmal den Server Öffne und 2 mal den Clienten und beim ersten Client etwas abschicke, dann bekommt es nur der Server, der andere Client bekommt die Nachricht irgendwie nicht.
Wenn ich mit dem server etwas abschicke, dann bekommen ja auch alle Clienten die Nachricht.
Woran kann das liegen?
Ich tu ja auch vorher alle Clienten abfragen mit der FOR NEXT Schleife, bevor die Nachricht abgeschickt wird.

Vielen Dank.

MfG Andreas
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250
 

Yogu

BeitragSa, Feb 24, 2007 11:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach es doch einfach so, dass die Clients erstmal die Daten an den Server schicken und dann der Server alle Nachrichten, die er empfängt wieder an die Clients schickt. Der Server muss noch einen Anhang zu den Daten anhängen, von wem die Daten kommen, dann können die Clients überprüfen, ob die Nachricht von ihnen ist.
 

bruce85

BeitragSa, Feb 24, 2007 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke @Yogu.
Ich habe das ja so gemacht, also der Client schickt eine Nachricht zum Server, dann fragt der Server alle Clients ab und schickt sie dann weiter.
Aber irgendwie will das nicht gehen.

MfG Andreas
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group