tcp
Übersicht
BlitzBasic
Allgemein|
|
FluiXBetreff: tcp |
Antworten mit Zitat |
|---|---|---|
|
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 |
Antworten mit Zitat |
|
|---|---|---|
|
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 |
Antworten mit Zitat |
|---|---|---|
| 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 |
Antworten mit Zitat |
|---|---|---|
|
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 |
||
|
|
FluiX |
Antworten mit Zitat |
|---|---|---|
| ok und wie sieht es dann mit den clienten aus, müssen die auch ihren port freigeben? | ||
Klaas |
Antworten mit Zitat |
|
|---|---|---|
|
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. |
||
Übersicht
BlitzBasic
Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group
