Netzwerk: Daten übertragen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Geeman

Betreff: Netzwerk: Daten übertragen

BeitragFr, Aug 22, 2008 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo leute,
ich habe mal eine frage, die zwar schon einige vor mir gestellt haben, wobei ich aber aus den antworten nicht schlau geworden bin.

und zwar:
wie kann man auf eine einfache methode z.b. einen string per tcp oder udp zu einem anderen rechner schicken?

ich hab das mal mit udp versucht, klappt aber iwie nicht.
ich bin eher noch ein n00b (, deshalb nich über den code usw weglachen... Wink )

Server:
Code: [AUSKLAPPEN]
Graphics 800, 600

iport = 4000
oport = 4001


udp_rd = CreateUDPStream(iport)
udp_wr = CreateUDPStream(oport)




While Not KeyDown(1)
   
sss$ = Input("> ")


WriteString(udp_wr, sss$)
SendUDPMsg udp_wr,"xxx.xxx.xxx.xxx"

Wend
      
CloseUDPStream udp_wr
CloseUDPStream udp_rd

und hier der
Client:
Code: [AUSKLAPPEN]
Graphics 800, 600

iport = 4000
oport = 4001


udp_rd = CreateUDPStream(iport)
udp_wr = CreateUDPStream(oport)




While Not KeyDown(1)
   


rd = RecvUDPMsg(udp_rd)

If rd <> 0 Then
   n = ReadAvail(udp_rd)
   If n > 0 Print ReadString$(udp_rd)
EndIf

Wend

CloseUDPStream udp_wr
CloseUDPStream udp_rd


ich habe zwei rechner über hamachi verbunden und die dementsprechende IP genommen und für "xxx.xxx.xxx.xxx" eingegeben.

was ist daran falsch?
was muss ich noch ändern / hinzufügen?

ich weiß schon, dass das schon oftmals gefragt wurde, aber über eine eindeutige, klare antwort, wie das ganze funktioniert, wäre ich sehr dankbar!

Geeman

ToeB

BeitragFr, Aug 22, 2008 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Was soll "SendUDPMsg udp_wr,"xxx.xxx.xxx.xxx"" bedeuten ?

Die IP muss ein Integer sein, such mal im Forum nach "INT_IP".

Wenn dass dann nicht klappt, schreib hinter SendUDPMsg als Port oport, also den Port mit dem du sachen verschikst.

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

Geeman

BeitragFr, Aug 22, 2008 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo,
für "xxx.xxx.xxx.xxx" habe ich die hamachi-ip von dem 2. rechner eingesetzt...

ich hab das mit dem INT_IP-zeux probiert, jedoch ohne erfolg...

ich hatte das ganze zuerst auch mit tcp probiert, nur auch erfolglos.

könnte nicht irgendwer einfach einmal (und dann erübrigen sich die ständigen fragen danach) einen server-code und den passenden clienten-code posten? (ob das nun tcp oder udp wär, wär mir persönlich völlig egal)

das wär echt mal ne richtige hilfe Exclamation

(ist das über hamachi überhaupt so ohne weiteres möglich?)


Geeman

Smily

BeitragFr, Aug 22, 2008 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
TCP solltest du verwenden, wenn du sicher gehen möchtest, dass die daten auch fehlerfrei ankommen.

Und für UDP brauchste keine zwei Ports.

schau dir mal in der hilfe OpenTCPStream und CreateTCPServer an Wink auch mit den Codebeispielen.

Damit müsstest du klar kommen.

cu,
Smily0412
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org
 

Geeman

BeitragFr, Aug 22, 2008 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
hatte ich vorher auch schon gemacht...

naja, ich werd noch nen bisschen rumprobieren... vllt wirds ja noch was Wink


Geeman

tft

BeitragSa, Aug 23, 2008 10:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo ....

ich selber widme mich auch gerade der UDP Problematik. Und du wirst feststellen das es fiele dinge gibt. Die dir den Spass verderben werden.

Das erste was mir auffällt ist das der Sende Port fehlt. Du must bei SendUdpMsg () den In Port des Empfängers mit angeben.
Dann must du die IP im Dot Format in eine Integer umwandeln. Dazu gibt es hir im Forum eine Funktion die INT_IP() heist. Die ist in etlichen beispielen zu finden.
Dabei ist noch wichtig ob du die beiden Codes auf einem oder Zwei separaten Rechner Startest. Den du kannst keine Nachicht über ein und dieselbe IP und den gleichen Ports Senden und empfangen.

2 mal die Gleiche IP , dann benötigst du für den Host 8001/8002 und der Client 8003/8004

Dabei ist dann noch wichtig ob die IP eine Locale oder die Internet IP ist. Ist es die Locale. Sollte es so funktionieren . Hast du eine Internet IP angegeben. Dann Funktioniert das nicht. Ein senden über das Internet an die sendende IP funktioniert in der regel nicht.

Eine Locale Ip ist zum Beispiel "127.0.0.1"
Aber auch "192.168.1.15" ist eine Locale IP. Aber eine die ein Router vergeben hat.

Ein Beispiel.

IP des Client = "84.123.0.1"
IP des Host = "84.123.0.1"

SendUDPmsg(UdpOutPort,INT_IP("84.123.0.1"),ClientUdpInPort)

Das geht ins leere. Die Server Im Internet leiten eine solche nachricht auf sich selber nicht weiter.

Du must erst ermitteln ob die nachricht Local oder über das Internet an eine von deiner abweichenden Ip geht.

Code werde ich hir nicht Posten. Experimentire etwas rum. Das ist zwal gerade bei Internet sachen echt ätzend. Aber der Lern Effect ist gewaltig.


Gruss TFT
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!
 

Geeman

BeitragSa, Aug 23, 2008 11:00
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für die hinweise.
vllt is das ja mit tcp nen bisschen leichter...
ich hab mal nen bisschen rumprobiert und hatte mit folgenden codes erfolg:

server
Code: [AUSKLAPPEN]
Graphics 800,600

;server

server = CreateTCPServer(8080)

If server <> 0
   Print "Server erstellt."
   Delay 1000
Else
   Print "Fehler beim Erstellen"
   Goto ende
EndIf

While Not KeyDown(1)

stream = AcceptTCPStream(server)

If stream
   Print ReadString$(stream)
   Delay 2000
Else
   Print "Warte..."
   Delay 1000
EndIf

Wend
.ende
CloseTCPServer server
Delay 1000


der client:
Code: [AUSKLAPPEN]

Graphics 800,600

;client

ip$ = Input("Server-IP: ")
Print "Versuche, zu verbinden..."
client = OpenTCPStream(ip,8080)

If client <> 0
   Print "Mit Server verbunden."
   Delay 1000
Else
   Print "Fehler beim Verbinden."
   Goto ende
EndIf


While Not KeyDown(1)

satz$ = Input("> ")
Print "Sende..."
WriteString client,satz
Print"...gesendet."

CloseTCPStream client
client = OpenTCPStream(ip,8080)

Wend
.ende
CloseTCPStream client
Delay 1000


leider musste ich beim clienten den tcpstream immer wieder neu öffnen, da ich sonst nur eine nachricht erfolgreich versenden konnte.
geht das iwie noch anders? Confused

zweitens habe ich es noch nicht hinbekommen, dass der server dem clienten (und nicht andersrum wie im bsp) einen string schickt...
wie kann man hinkriegen?

(thx 4 ur help)
Geeman

The_Nici

BeitragSa, Aug 23, 2008 14:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht das schliessen des Streams aus der schleife nehmen? ôo
Versuch mal deinen Code einzurücken. Und verwende lieber Function und kein Goto.
Code: [AUSKLAPPEN]

Function ende()
   CloseTCPStream(client)
   End
End Function

Goodjee

BeitragSa, Aug 23, 2008 14:50
Antworten mit Zitat
Benutzer-Profile anzeigen
und falls du noch ein paar infos oder beispiel brauchst kannst du im codearchiv jede menge udpcodes und tcpcodes finden...die suche ist den freund Wink
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group