UDP, und weiter?
Übersicht

![]() |
MisterMabooBetreff: UDP, und weiter? |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich hoffe ich spreche hier ein problem an dass viele anfänger haben:
ich habe lange gesucht aber immer noch nichts gefunden was mich UDP & co. näher bringen könnte. ich habe ehrlich gesagt kaum eine ahnung von so etwas; hätte sie aber gerne! ich habe den code so mehr oder weniger aus der onlinehilfe übernommen. wenn ich die .exe jetzt meinem freund schicke und ihm brav meine IP diktiere, kann er aber genau so wenig empfangen wie ich muss ich diese ports (4000, 4001) öffnen? kennt jemand vielleicht ein tutorial für deppen das alles von anfang an erklärt? ich bin auch nicht abgeneigt mir viele hintergrundinformationen zur generellen funktion dieser protokolle durchzulesen.. wie gesagt, ich bin ein grünschnabel Code: [AUSKLAPPEN] Graphics 800, 600,24,2
SetBuffer BackBuffer() Inp_Port = 4000 Out_Port = 4001 ip_count = CountHostIPs(GetEnv("localhost")) Repeat Text 0, 0, "Beispiel UDP Communications" Text 0, 10, "LOCAL IP:" For i = 1 To ip_count Text 0, 20, DottedIP(HostIP(1)) Next Text 0, 30, "Ziel IP#: xxx.xxx.xxx.xxx" Dest_IP$ = NewInput$(Dest_IP$) Text 0, 40, ">" + Dest_IP$ + "|" Flip Cls Until KeyDown(28) IP = INT_IP(Dest_IP$) udp_rd = CreateUDPStream(inp_port) udp_wr = CreateUDPStream(out_port) Repeat Cls Text 0, 40, "Chat startet, esc zum beenden" byte1 = GetKey() If byte1>0 Then If Byte1 = 13 Then WriteByte(udp_wr, byte1) SendUDPMsg udp_wr, IP, Inp_Port Else drawedSendText$ = drawedSendText$ + Chr(Byte1) WriteByte(udp_wr, byte1) SendUDPMsg udp_wr, IP, Inp_Port EndIf EndIf IP_rd = RecvUDPMsg(udp_rd) If IP_rd <> 0 Then Buflen = ReadAvail(udp_rd) If Buflen> 0 Then byte1 = ReadByte(udp_rd) If byte1 <> 13 Then drawedRecText$ = drawedRecText$ + Chr$(byte1) EndIf EndIf EndIf Text 0, 50, "gesendet: "+drawedSendText$ Text 0, 60, "empfangen: "+drawedRecText$ Flip Until KeyDown(1) CloseUDPStream udp_wr CloseUDPStream udp_rd End Function INT_IP(IP$) a1 = Int(Left(IP$, Instr(IP$, ".") - 1)) : IP$ = Right(IP$, Len(IP$) - Instr(IP$, ".")) a2 = Int(Left(IP$, Instr(IP$, ".") - 1)) : IP$ = Right(IP$, Len(IP$) - Instr(IP$, ".")) a3 = Int(Left(IP$, Instr(IP$, ".") - 1)) : IP$ = Right(IP$, Len(IP$) - Instr(IP$, ".")) a4 = Int(IP$) Return (a1 Shl 24) + (a2 Shl 16) + (a3 Shl 8 ) + a4 End Function Function NewInput$(currentText$) localChar = GetKey() If (localChar > 0) And (localChar <> 8 ) Then currentText$ = currentText$ + Chr$(localChar) ElseIf localChar = 8 Then length = Len(currentText) If length > 0 Then currentText = Left(currentText, length - 1) EndIf EndIf Return currentText$ End Function |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein, ich denke das du in dem Programm das gerne auf einem PC testen möchtest. Du kannst aber nicht zwei Ports belegen, das geht nicht. Du erstellst ja dann 2 mal den Stream mit 4000 / 4001, deshalb klappt das nicht. Entweder du musst es über netzwerk testen oder halt ein einfaches Server/Client system machen, also server hat einen festen Port (immer z.B. 4000), die Client einen Varoiablen (also statt CreateUDPStream(4001) dann CreateUDPStream() oder CreateUDPStream(0). Dann Fragt der Client den Server an, ob er druaf kann un der Server antwortet ihm "ja". Dann sind die beiden Verbunden und du kannst mit den abgepeicherteten Werten (UDPMsgIP![]() ![]() Zu deiner Frage mit den Tuts, nein ich kenn keins welches auf Blitzbasic basiert... Um ein wenig werbung zu machen ![]() 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! |
Hangman |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat Holzchopf in https://www.blitzforum.de/foru...p;start=20 :
Zitat: Schicke die Nachricht nicht konstant an Port 9002, sondern an den Port, der dir UDPMsgPort zurückgibt. Du kannst nämlich nie wissen, ob dein Router aus dem Port 9002 vom LAN deines PCs ins WWW nicht plötzlich einen anderen Port macht. Router tun sowas.
Holzchopf's Beispiel dazu: Code: [AUSKLAPPEN] Graphics 400, 300, 0, 2
SetBuffer BackBuffer() Global TIMER = CreateTimer(30) ; IP und Port des Gegenübers Global partnerIp, partnerPort Type TMessage Field txt$ Field col End Type Const STATE_SETUP = 0 Const STATE_JOIN = 1 Const STATE_GAME = 2 Global state = STATE_SETUP Global Stream Global inputText$, inputTextTemp$ ; Hauptschleife While Not KeyDown(1) Select state Case STATE_SETUP Setup Case STATE_JOIN Join Case STATE_GAME Game End Select FlushKeys() Flip 0 WaitTimer TIMER Cls Wend End Function Setup() If KeyHit(2) ; Server erstellen Stream = CreateUDPStream(9000) ; fixer Port Message("Server erstellt", $AAAAAA) state = STATE_GAME ElseIf KeyHit(3) state = STATE_JOIN EndIf Text 0,0, "1: Server" Text 0,20, "2: Client" End Function Function Join() If Input() ; lokalen Stream erstellen Stream = CreateUDPStream() ; variabler Port ; Serververbindung aufbauen partnerIp = StrToIntIP(inputText) ; IP und partnerPort = 9000 ; Port des Servers sind bekannt ; Anmelden WriteByte Stream, $00 SendUDPMsg Stream, partnerIp,partnerPort Message("Verbindungsaufbau", $AAAAAA) state = STATE_GAME EndIf Text 0,0, "IP des Servers eingeben:" Text 0,20, inputTextTemp End Function Function Game() Local ip = RecvUDPMsg(Stream) If ip Local msgType = ReadByte(Stream) Select msgType ; Verbindungsanfrage Case $00 ; erst hier erfährt der Server IP und Port des Clienten partnerIp = ip partnerPort = UDPMsgPort(Stream) WriteByte Stream, $01 SendUDPMsg Stream, partnerIp, partnerPort Message("Client verbunden", $AAAAAA) ; Verbindungsaufbau Case $01 Message("Verbindung aufgebaut", $AAAAAA) ; Nachricht Case $10 Message(ReadString(Stream), $00FF00) End Select EndIf If Input() Message(inputText, $0080FF) WriteByte(Stream,$10) WriteString(Stream,inputText) SendUDPMsg Stream, partnerIp, partnerPort EndIf DrawMessages Color 255,255,255 Text 0, 260, "Nachricht:" Text 0, 280, inputTextTemp End Function ; leicht erweiterte Inputfunktion Function Input() Local char = GetKey() If char = 8 If Len(inputTextTemp)>1 inputTextTemp = Left(inputTextTemp, Len(inputTextTemp)-1) Else inputTextTemp="" EndIf ElseIf char>31 inputTextTemp = inputTextTemp +Chr(char) ElseIf char=13 inputText = inputTextTemp inputTextTemp = "" Return True EndIf End Function Function Message(pMessage$, pColor) Local msg.TMessage = New TMessage msg\txt = pMessage msg\col = pColor End Function Function DrawMessages() Local y = 240 Local msg.TMessage = Last TMessage Repeat Color 0,0,msg\col Text 0,y, msg\txt If y < 0 Delete msg EndIf y = y -20 msg = Before msg Until msg = Null End Function Function StrToIntIP(pIP$) Local b1 = Int(Left(pIP$,Instr(pIP$,".")-1)):pIP$=Right(pIP$,Len(pIP$)-Instr(pIP$,".")) Local b2 = Int(Left(pIP$,Instr(pIP$,".")-1)):pIP$=Right(pIP$,Len(pIP$)-Instr(pIP$,".")) Local b3 = Int(Left(pIP$,Instr(pIP$,".")-1)):pIP$=Right(pIP$,Len(pIP$)-Instr(pIP$,".")) Local b4 = Int(pIP$) Return (b1 Shl 24) + (b2 Shl 16) + (b3 Shl 8 ) +b4 End Function Finde dieses Beispiel wunderbar zum lernen von UDP. |
||
Ich habe Berthold gebrochen. |
![]() |
MisterMaboo |
![]() Antworten mit Zitat ![]() |
---|---|---|
soo.. auf meinem pc als client und server auf einmal läufts perfekt, wenn mein freund auf seinem pc mitmischen will wird aber keine verbindung aufgebaut.
muss ich jetzt am router den entsprechenden port öffnen? (9000) |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group