Nachricht kommt beim Server nicht an (Chat)

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Snade

Betreff: Nachricht kommt beim Server nicht an (Chat)

BeitragMo, Aug 03, 2009 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Nachdem ich eine weile keine lust mehr aufs proggen hatte hab ich mich mal wieder ein bisschen eingearbeitet. Ich spiele gerade ein bisschen mit Netzwerkfunktionen. Dabei wollte ich einen kleinen Chat entwickeln. Ich weis das das mal wieder ne noob frage wird Embarassed aber ich komme einfach nicht dahinter warum der server nur eine einzige Nachricht empfaengt. hier erstmal der code:

Server

BlitzBasic: [AUSKLAPPEN]
Graphics 640,480,32,2

Arial = LoadFont(Arial,20,1,0,0)
SetFont Arial


;-------------------------------------
;server-------------------------------
;-------------------------------------

AppTitle "Funserver 0.1"

funserver=CreateTCPServer(8080)

If funserver <> 0 Then
Print "Server started successfully."
Else
Print "Server failed to start."
End
End If

While Not KeyHit(1)


strStream=AcceptTCPStream(funserver)

If strStream Then
Print ReadString$(strStream)


End If

Wend



End



Client

BlitzBasic: [AUSKLAPPEN]
Graphics 640,480,32,2

Arial = LoadFont(Arial,20,1,0,0)
SetFont Arial


;------------------------------------
;client------------------------------
;------------------------------------

AppTitle "Funclient 0.1"


client$ = Input$("Nickname: ")
ip$ = Input$("Geben sie bitte die Server IP ein: ")

funclient=OpenTCPStream(ip,8080)

If funclient<>0 Then
Print "Client Connected successfully."
WriteString funclient,client + " ist connected"
Else
Print "Server failed to connect."
WaitKey
End
End If



;-------------------------------------
;chat---------------------------------
;-------------------------------------

Repeat

msg$ = Input$ ("")

WriteString funclient,client + ": " + msg

Until KeyHit(1)

CloseTCPStream funclient

End



ausserdem (kein sz auf der tastatur Smile ) sag der client immer das er das er den server connected hat egal welche ip man eingibt auch 1.1.1.1 oder so oder z.B. nur 1.1


mfg. Snade

Tankbuster

BeitragMo, Aug 03, 2009 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Testest du das über ein LAN oder übers Internet, oder lässt du beide Sachen auf deinem PC laufen?
Twitter
Download Jewel Snake!
Windows|Android

Holzchopf

Meisterpacker

BeitragMo, Aug 03, 2009 18:44
Antworten mit Zitat
Benutzer-Profile anzeigen
AcceptTCPStream gibt pro Verbindung nur einmal etwas zurück. Diese Verbindung dann am Leben zu halten und auf neue Daten zu prüfen ist dann die Aufgabe des Programmierers. Dafür benutzt du ReadAvail und natürlich die Read-Befehle deiner Wahl. Die Verbindungen kannst du in Types speichern, in Dims oder - wenn eh nie mehr als ein Client verbinden wird - ganz einfach so in einer Variable.

mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

Kaddy

BeitragDi, Aug 04, 2009 1:39
Antworten mit Zitat
Benutzer-Profile anzeigen
las den Server einfach ständig nach gucken ob Nachrichten angekommen sind

z.b.
Verbindung = false
repeat
stream=accepttcpstream(server)
if stream then
print readstring(stream)
endif
if verbindung = true then
lol$=readstring (stream)
if Iol <>0 then
print lol$
endif
if lol ="bye" then verbindung=false
endif
until irgendwas

nur n kleines Beispiel wie man es lösen könnte
Bin Aktuell auf der Suche nach einen Programmierer Team, ob Hobby Team oder Firma ist egal. Einfach eine PM an mich schreiben.
Bezahlung verlange ich NATÜRLICH keine Wink

Es gibt 10 arten von Menschen, die einen verstehen das Binärsystem , die anderen nicht SmileSmile

Snade

BeitragDi, Aug 04, 2009 7:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke fuer die antworten!


EDIT1: Ihrgendwie bekomme ich es nicht hin.

Server:

BlitzBasic: [AUSKLAPPEN]
Graphics 640,480,32,2

Arial = LoadFont(Arial,20,1,0,0)
SetFont Arial

Global verbindung
Global funserver
Global msg$

;-------------------------------------
;server-------------------------------
;-------------------------------------

AppTitle "Funserver 0.1"

funserver=CreateTCPServer(8080)

If funserver <> 0 Then
Print "Server started successfully."
Else
Print "Server failed to start."
End
End If


;While Not KeyHit(1)

ver = False ;verbindungs variable

Repeat

stream=AcceptTCPStream(funserver)

If stream Then
Print ReadString(stream)
If ReadAvail(stream) Then ver = True ; gucken ob eine nachricht angekommen ist
If ver = True Then ; wenn eine angekommen ist die verbindung da
msg$ = ReadString$(stream) ;readstring in einer variable speichern
If msg$ <> 0 Then ; wenn die nachricht richtig angekommen ist
Print msg$ ; dann schreibe die nachricht auf
EndIf
End If
End If



Until KeyHit (1)
;Wend



End


Ich verstehe nicht was ich falsch mache.

Habe die Schleife mal kommentiert um zu veranschaulichen wie ich das verstanden hab!

Snade

BeitragMi, Aug 05, 2009 10:12
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry fuer den Doppelpost aber das Thema ist schon zu weit unten und das problem ist doch nicht so schwer zu loesen fuer euch oder? Ich komme einfach nicht weiter hab mir auch schon andere TCP-Chat Beispiele angesehen aber ich blicke einfach nicht durch wie ich die auf mein Code uebertragen kann.

(Admin oder Mod bitte den Thread nicht trashen - Danke)

mfg. Snade

Starwar

BeitragMi, Aug 05, 2009 11:07
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
stream=AcceptTCPStream(funserver)	 
If stream Then ;...


Wird nur Daten liefern sobald ein neuer Client sich verbindet. Danach geht der alte Stream verloren.
Wenn du weiterhin was auslesen willst, musst du das Handle des Streams speichern und mit ReadAvail ob er Daten enthält.

BlitzBasic: [AUSKLAPPEN]
Type streamList
Field stream
End Type

;funserver erstellen

Repeat
stream = AcceptTCPStream(funserver)
If stream Then
item.streamList = New streamList
item\stream=stream
Print "Neuer Client!"
EndIf
For item.streamList = Each streamList
If ReadAvail(item\stream) Then
Print ReadLine(item\stream)
EndIf
Next
Until KeyDown(1)


MFG

Edit:
Holzchopf hat Folgendes geschrieben:
AcceptTCPStream gibt pro Verbindung nur einmal etwas zurück. Diese Verbindung dann am Leben zu halten und auf neue Daten zu prüfen ist dann die Aufgabe des Programmierers. Dafür benutzt du ReadAvail und natürlich die Read-Befehle deiner Wahl. Die Verbindungen kannst du in Types speichern, in Dims oder - wenn eh nie mehr als ein Client verbinden wird - ganz einfach so in einer Variable.

Was willst du mehr?
  • Zuletzt bearbeitet von Starwar am Mi, Aug 05, 2009 22:37, insgesamt einmal bearbeitet
 

Kaddy

BeitragMi, Aug 05, 2009 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
problem ist halt das alles nur 1x mal passiert und zwar nur unter der bedingung wenn sich ein client connected hat, da aber der client nicht 100 mal inner sekunde connected , überprüft er nur einmal ob was ankommt bzw. schreib es nur einmal und macht danach nichts mehr mit den daten
Bin Aktuell auf der Suche nach einen Programmierer Team, ob Hobby Team oder Firma ist egal. Einfach eine PM an mich schreiben.
Bezahlung verlange ich NATÜRLICH keine Wink

Es gibt 10 arten von Menschen, die einen verstehen das Binärsystem , die anderen nicht SmileSmile

Starwar

BeitragMi, Aug 05, 2009 22:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Sagte ich das nicht?

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group