UDP Problem

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Schnittlauch

Unkraut

Betreff: UDP Problem

BeitragSo, Dez 10, 2006 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi
Ich versuche gerade meinen TCP Jamps Server auf UDP umzustellen.
Es muss halt sein.

So, jetzt zum Problem.
Code: [AUSKLAPPEN]

   if not server.Eof() Then
      Local inmsg:String = server.ReadLine()
      if inmsg <> 0 Then
         Print "INCOMIG MSG: "+inmsg
      End If
   End if


Hier verfängt sich der Server irgendwie.

MFG
Schnittlauch
Ich wars nicht.

Vertex

BeitragSo, Dez 10, 2006 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
if inmsg <> "" Then


versuchs damit. Er versucht doch sicher die 0 in "0" umzuwandeln. Und "0" ist <> "".

mfg olli
vertex.dreamfall.at | GitHub

hamZta

Administrator

BeitragSo, Dez 10, 2006 18:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Welche Netzwerklib verwendest du denn?

Wenn BNetEx, aus den Examples:
Code: [AUSKLAPPEN]
      If Client.RecvAvail() Then
         While Client.RecvMsg() ; Wend

         If Client.Size() > 0 Then
            Print("Message from client:")
            Print(" - IP = " + TNetwork.StringIP(Client.GetLocalIP()))
            Print(" - Port = " + Client.GetLocalPort())
            While Not Client.EoF()
               Print(">"+Client.ReadLine())
            Wend

            Client.WriteLine("OK")
            While Client.SendMsg() ; Wend
         EndIf
      EndIf
Blog.

Schnittlauch

Unkraut

BeitragSo, Dez 10, 2006 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich benutze nur Sockets, und der Server hängt sich immernoch auf -.-
Ich wars nicht.

Vertex

BeitragSo, Dez 10, 2006 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm, ich würds ja mit While Not Server.EoF() versuchen. Und soweit ich weiß, liest ReadLine entweder bis zum ~n~r oder bis zum Ende des Streams aus, so dass du die Abfrage mit <> "" eh ersparen kannst.

Ansonsten können wir dir ohne mehr Code nicht helfen.

Bei den Socketstream von BRL wird dein Programm wird solange angehalten, bis was rein kommt. Du solltest danach also erstmal die Verbindung prüfen, denn entweder liegt eine auslesbare Nachricht danach vor oder die Verbindung wurde getrennt.

mfg olli
vertex.dreamfall.at | GitHub

Pdd

BeitragSo, Dez 10, 2006 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Code des Clienten:

Code: [AUSKLAPPEN]
      If PB_ButtonClick((Server$(i, 6))) Then
         ;; Jetzt Ping
         Pingstream = CreateUDPStream(49252)
         
         If Pingstream <> 0 Then
            Server$(i, 5) = "Ping..."            
            WriteLine PingStream, "PING";"LMI" + Chr(10) + "DUMMY" + Chr(10) + "1" + Chr(10) + Version#
            SendUDPMsg Pingstream, (Server$(i, 0))
            goT = MilliSecs()
            PingString$ = UDPholen$(PingStream)
            If PingString$ = "PONG" Then
               stopT = MilliSecs()
               time = stopT - goT
               Server$(i, 5) = time + "ms"
            Else
               Server$(i, 5) = "Falsche Rückmeldung."
            EndIf
         Else
            Server$(i, 5) = "Nicht erreichbar."      
         EndIf
      EndIf


Herraus kommt immer "Nicht erreichbar." Mit TCP hat es aber noch funktioniert :/
Lieber Apfel als Birne.

Vertex

BeitragSo, Dez 10, 2006 19:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, dann ist vllt. der Port gerade blockiert. Liegt meistens daran, dass das Programm nicht richtig beendet wurde und auch der Socket nicht freigegeben wird. Ich würde immer das Betriebsystem den Port aussuchen lassen und beim versenden den richtigen Remoteport angeben.

mfg olli
vertex.dreamfall.at | GitHub

Schnittlauch

Unkraut

BeitragSo, Dez 10, 2006 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
so, jz kommt mehr code.
Code: [AUSKLAPPEN]

Function inudp:String()
'   Local cl:TClient
'   For cl:TClient = EachIn cllist
'      if SocketReadAvail(cl.sok) > 0 Then
'         Local inmsg:String = cl.con.ReadLine()
'         if Left(inmsg$,4) = "PING" Then
'            cl.con.WriteLine("PONG")
'         Else
'            Print inmsg$
'         End if
'         Print inmsg$
'      End if   
'      if makeop = cl.name Then
'         cl.stat = 6
'         outwin.AddText(cl.name+" is now an OP"+Chr(10))
'         cl.con.WriteLine("YAO")
'         makeop = ""
'      End If
'   Next
   'if not server.Eof() Then
      Local inmsg:String = server.ReadLine()
      if inmsg <> "" Then
         Print "INCOMIG MSG: "+inmsg
      End If
   'End if
End Function

...

Function starttcpserver()
   server_socket = CreateUDPSocket()
   if BindSocket(server_socket,49252) Then
   '   SocketListen(server_socket)
      server = CreateSocketStream(server_socket,False)
   End if   
End Function


Und der Server stürzt wirklich ab -.-[/url]
Ich wars nicht.

Vertex

BeitragSo, Dez 10, 2006 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Haste mal alles einzeln nacheinander abgefahren? Meistens sieht man da gleich, wo das Problem wirklich auftaucht.

mfg olli
vertex.dreamfall.at | GitHub

Schnittlauch

Unkraut

BeitragDi, Dez 12, 2006 16:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Er steckt bei dem read Befehl Crying or Very sad
Ich wars nicht.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group