tcp

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

FluiX

Betreff: tcp

BeitragMi, Mai 25, 2005 9:26
Antworten mit Zitat
Benutzer-Profile anzeigen
ich habe versucht mit zwei selbst geschriebenen progs eine nachricht über das internet zu schicken, es hat allerdings immer nur einmal per stream geklappt. hier mal der quellcode:

Server
Code: [AUSKLAPPEN]
AppTitle"Server"

port=8080
server=CreateTCPServer(port)

If Server<>0 Then
Print "Server erfolgreich gestartet"
Else
Print "Da stimmt was nicht"
EndIf


While Not KeyHit(1)
serverstream=AcceptTCPStream(server)

If serverstream<>0 Then
Print ReadString$(serverstream)
EndIf

Wend
CloseTCPServer Server
End


und der client:
Code: [AUSKLAPPEN]
AppTitle"Reciever - Client"

ip$="127.0.0.1"
port=8080
stream=OpenTCPStream(IP,Port)

If stream<>0 Then
Print "Der gait (Client verbunden)"
Else
Print "Du bist doof (Geht net)"
WaitKey
End
EndIf

While Not KeyDown(1)

msg$=Input("msg: ")
WriteString stream,msg
Print "gesendet"

Wend

CloseTCPStream stream
End


Wie gesagt eine nachricht kann der server empfangen und wenn ich dann den client neustarte(oder einen neuen stream erstelle) kann der gleiche server auch immer nur die erste nachricht empfangen
 

Klaas

BeitragMi, Mai 25, 2005 9:43
Antworten mit Zitat
Benutzer-Profile anzeigen
schau mal ...
Code: [AUSKLAPPEN]

While Not KeyHit(1)
serverstream=AcceptTCPStream(server) ; .. hier liegt das Problem, der Streamhandle wird immer überschrieben

If serverstream<>0 Then
Print ReadString$(serverstream)
EndIf

Wend
CloseTCPServer Server
End


da du bei jedem Schleifendurchlauf den Streamhandle per AcceptTCPStream übnerschreibst kann also nur beim allerersten Senden was empfangen werden.

mach es besser so:
Code: [AUSKLAPPEN]

While Not KeyHit(1)
If serverstream<>0 Then
   Print ReadString$(serverstream)
else
   serverstream = AcceptTCPStream(server)
EndIf

Wend
CloseTCPServer Server
End


jetzt würde aber das Problem bestehen das nur einmal jemand connecten darf ... das löst du so das du fragst ob der Stream beendet wurde. Auch solltest du prüpfen ob überhauptwas zu lesen da ist:

Code: [AUSKLAPPEN]

While Not KeyHit(1)
If serverstream<>0 Then
   if eof(serverstream) then
       serverstream = false
   elseif readavail(serverstream)
      Print ReadString$(serverstream)
   endif
else
   serverstream = AcceptTCPStream(server)
EndIf

Wend
CloseTCPServer Server
End


ich hab die Listings nicht getestet .. kann also sein das dort ein paar Fehler drin sind, aber die Theorie siehst du ja

FluiX

BeitragMi, Mai 25, 2005 22:21
Antworten mit Zitat
Benutzer-Profile anzeigen
ok das hat mir sehr geholfen, danke. Ich kenne mich mit den tcp befehlen noch nicht so aus. Ich hätte noch eine frage und zwar wie muss ich das machen damit es übers internet läuft, welche ports kann ich nehmen? und kann ich irgenwie ports freigeben(also ob das mein programm kann?)

skey-z

BeitragMi, Mai 25, 2005 22:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Also am Besten kann man hohe ports(bis max 63000 oder so, weiß nun nicht die genaue zahl) nehmen, die sollten nicht sehr oft genutzt sein.

wenn du als host/server startest, und nen router hast, musst du dort den jeweiligen port freigeben, damit sich clients überhaupt mit dir verbinden können und dann nachrichten schicken können.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

FluiX

BeitragDo, Mai 26, 2005 11:34
Antworten mit Zitat
Benutzer-Profile anzeigen
ok und wie sieht es dann mit den clienten aus, müssen die auch ihren port freigeben?
 

Klaas

BeitragDo, Mai 26, 2005 12:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

wenn du als host/server startest, und nen router hast, musst du dort den jeweiligen port freigeben, damit sich clients überhaupt mit dir verbinden können und dann nachrichten schicken können.


... also genauer gesagt muß für den Server ein sogenanntes "Portforwarding" eingestellt werden wenn er hinter einem Router sitzt da ihn sonst keine Packete erreichen. Der Router muß bei einem NAT ja wissen welcher Rechner der Server ist.
Zudem müßen bei Client und Server jeweils der Port an dem Router/Firewall freigegeben sein da sonst die Packete den Router garnicht passieren können.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group