frage TCP UPD socket in BMX

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Mathias-Kwiatkowski

Betreff: frage TCP UPD socket in BMX

BeitragDi, Dez 04, 2007 13:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Client Ausschnit.
Code: [AUSKLAPPEN]
Global Socket:TSocket = CreateUDPSocket()
Global  Stream:TStream = CreateSocketStream(socket)
Socket.connect(HostIp("purechannel.ath.cx"),2010)


Server auschnitt
Code: [AUSKLAPPEN]
 Print "starting server..."
          Self.Socket = CreateUDPSocket()'socket.CreateTCP()
          Assert Self.socket <> Null Else "Unable to create UDP socket"
          Assert BindSocket(Self.Socket,Self.port) Else "Unable to bind socket on "+Self.port



wenn ich peer TCP etwas sende sprich wenn cih diese 2 dinge anstadt UDP , TCP raus mache kommen meine daten an, ich sende diese mit WriteLine Stream,"Hallo Server"

wenn das auf dem server ankommt soll er automatisch zurückschreiben bzw. das macht er auch, wenn ich es in tcp mache upd macht er das irgendwie nicht

warum?


EDIT oder wie bau ich gener ein udp server bzw. clienten auf? mit winsocks, da ich keine lib verwenden möchte.
 

Dreamora

BeitragDi, Dez 04, 2007 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Ist nicht gesagt das ein UDP packet überhaupt ankommt.
2. Wenn du es auf ein System ausserhalb deines Routers machst, musst am Zielort eine Portweiterleitung eingerichtet sein, sonst gehts ebenfalls net.

3. Nutz einen Port der für Spiele freigegeben ist anstatt sonstwas rumzuwursteln. -> >= 6000 mindestens
4. Guck dir Vertex BNetEx an, das dürfte dir ein paar Dinge ersparen weil einfach so socket rauf, stream machen und schicken is net mit UDP
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Mathias-Kwiatkowski

BeitragDi, Dez 04, 2007 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
zu
2. Wenn du es auf ein System ausserhalb deines Routers machst, musst am Zielort eine Portweiterleitung eingerichtet sein, sonst gehts ebenfalls net.

ich denke das das auf die server ebene agieren muss oder?
oder muss die port weiterleitung in windows eingestellt werden?
 

Dreamora

BeitragDi, Dez 04, 2007 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
garnicht
Die Portweiterleitung muss auf dem Router erfolgen, da kannst du auf deinem System nichts machen.

Solange du nur auf deinem System / innerhalb deines LANs agierst benötigt es das net, sobald aber jemand vom Internet aufs lokale Netz verbinden können soll muss der, der den server laufen hat, auch die Ports forwarden oder die ports direkt offen haben (dumme idee)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Mathias-Kwiatkowski

BeitragMi, Dez 05, 2007 4:24
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich benutz nun die bnetex

und wie kann man peer udp zurück am clienten senden?

Code: [AUSKLAPPEN]

Framework Vertex.BNetEx

Global Stream : TUDPStream

'Try

Stream = New TUDPStream
If Not Stream.Init() Then Throw("Can't create socket")
Stream.SetLocalPort(6000)

Repeat
   If Stream.RecvAvail() Then
      While Stream.RecvMsg() ; Wend

      If Stream.Size() > 0 Then
         ip = TNetwork.StringIP(Stream.GetMsgIP())
         
   
         While Not Stream.Eof()
            StreamIncomming:String = Stream.ReadLine()
                        
            
            If streamincomming = "Hello World!" Then ip.WriteLine("LOL")
            
            
            
            
            
            
            
            
            
            
            
         Wend
      EndIf
   EndIf
Forever



If Stream Then Stream.Close()
WriteStdout("~n- ready -~n")
End


ip.WriteLine("LOL")
geht leider nicht weil hier angeblich ein fehler sein soll " ip = TNetwork.StringIP(Stream.GetMsgIP()) "

wie kann das?
 

Dreamora

BeitragMi, Dez 05, 2007 9:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Nachricht sagt dir von welcher IP und Port sie kommt. Damit kannst du einen UDP Stream erzeugen und da drauf eine nachricht zurück schicken.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Mathias-Kwiatkowski

BeitragMi, Dez 05, 2007 10:01
Antworten mit Zitat
Benutzer-Profile anzeigen
ja das habe ich bereits versucht,
hier das server modell

Code: [AUSKLAPPEN]

Framework Vertex.BNetEx

Global Stream : TUDPStream

'Try

Stream = New TUDPStream
If Not Stream.Init() Then Throw("Can't create socket")
Stream.SetLocalPort(6000)
Stream.SetRemotePort(6000)

Repeat
   If Stream.RecvAvail() Then
      While Stream.RecvMsg() ; Wend

      If Stream.Size() > 0 Then
'         ip = TNetwork.StringIP(Stream.GetMsgIP())
         
   
         While Not Stream.Eof()
            StreamIncomming:String = Stream.ReadLine()
            WriteStdout StreamIncomming
            If streamincomming = "Hello World!" Then
               Stream.SetRemoteIP(TNetwork.IntIP(TNetwork.StringIP(Stream.GetMsgIP())))
               Stream.WriteLine("Hello World1!")
               WriteStdout(Stream.SendMsg() + " Bytes sended~n")
               
            EndIf
         Wend

      EndIf
   EndIf
Forever



If Stream Then Stream.Close()
WriteStdout("~n- ready -~n")
End


und hier das client modell

Code: [AUSKLAPPEN]
SuperStrict

Framework Vertex.BNetEx

Global Stream : TUDPStream



Stream = New TUDPStream
If Not Stream.Init() Then Throw("Can't create socket")
Stream.SetRemoteIP(TNetwork.IntIP("127.0.0.1"))
Stream.SetLocalPort()
Stream.SetRemotePort(6000)

Stream.WriteLine("Hello World!")
WriteStdout(Stream.SendMsg() + " Bytes sended~n")



Repeat
   If Stream.RecvAvail() Then
   End
      While Stream.RecvMsg() ; Wend

      If Stream.Size() > 0 Then
'         ip = TNetwork.StringIP(Stream.GetMsgIP())
         

             While Not Stream.Eof()
            WriteStdout Stream.ReadLine()
            
         Wend


      EndIf
   EndIf
Forever




If Stream Then Stream.Close()
WriteStdout("~n- ready -~n")
End


er soll wenn client Hello World! gesendet hat zurück am clienten Hello World1! senden, allerdings sendet er es direct an sich selber, sprich der server am server. und das wollt ich eigentlich nicht

damit der server es am clienten sendet habe ich volgendes eingebaut:

(am server eingebaut)
Code: [AUSKLAPPEN]
Stream.SetRemoteIP(TNetwork.IntIP(TNetwork.StringIP(Stream.GetMsgIP())))
               Stream.WriteLine("Hello World1!")
               WriteStdout(Stream.SendMsg() + " Bytes sended~n")

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group