Socket Probleme

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Macintosh

Betreff: Socket Probleme

BeitragDo, Jun 03, 2010 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey... ich habe mir einen kleinen "server" , wenn man will, geproggt.
Sobal ich mit dem Terminal (telnet) connecte funzt alles prime. Ich bekomme eine Nachricht geschickt usw.
Nur mache ich irgendwas mit dem empfangen von nachrichten falsch, entweder ist es der buffer (byte ptr) oder was anderes ^^

hier mal code iwe ich den Buffer "anlege":
BlitzMax: [AUSKLAPPEN]
Local buff:Byte Ptr = MemAlloc( 1024 )

Ist das denn überhaupt richtig so?

Danke.

Ganzer Code
BlitzMax: [AUSKLAPPEN]
Const PORT	:Int = 1234

Global socket :TSocket
Global datas :TSocket

Global msg :String = "Connected!"
Global rcv :String = ""

Function _init()

socket = CreateTCPSocket()
BindSocket( socket, PORT )
SocketListen( socket )

EndFunction

Function _waitForConnection()

While Not datas

datas = SocketAccept( socket )

Wend

datas.send( msg.ToCString(), msg.length )
Print "client connected"

EndFunction

Function _main()

Local buff:Byte Ptr = MemAlloc( 1024 )
Local read:Int
Local count:Int = 0

_waitForConnection()

While( Not AppTerminate() )

If datas

count = 0
count = datas.readavail()

If count

datas.recv( buff, count )
rcv.FromCString( buff )

Print "Data: " + rcv

If rcv = "END" Then Exit

EndIf

EndIf

Wend

_close()

EndFunction

Function _close()

Print "close ports"

CloseSocket( socket )
CloseSocket( datas )

EndFunction

OnEnd( _close )

'-(:---MAIN"LOOP"---:)-

_init()
_main()
  • Zuletzt bearbeitet von Macintosh am Do, Jun 03, 2010 19:45, insgesamt einmal bearbeitet

Thunder

BeitragDo, Jun 03, 2010 19:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Cool - so einen Code habe ich gesucht. Ich habe auch den Fehler gefunden:

BlitzMax: [AUSKLAPPEN]
rcv.FromCString(buff) 'hat keinen Affekt
rcv=rcv.FromCString(buff) ' funktioniert


mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

Macintosh

BeitragDo, Jun 03, 2010 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok. Danke...
der fehler ist echt peinlich xD ^^

ja? will dazu noch ein tut schreiben, zu sockets.

Gibt allerdings noch einen Bug: Der Buffer muss geleert werden.

Jolinah

BeitragFr, Jun 04, 2010 9:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Zu dem Bug: Du solltest prüfen wie viel wirklich gelesen wurde, und dann nur diesen Teil verwenden:

Und das count und ReadAvail ist im Prinzip auch nicht nötig. Du kannst statt dessen einfach die grösse des Buffers (1024) angeben, schauen wieviel effektiv gelesen wurde und dann danach eine 0 setzen, um den C-String in jedem Fall abzuschliessen.

BlitzMax: [AUSKLAPPEN]
Local read:Int = datas.recv(buff, 1024)  'In read steht nun die Anzahl der gelesenen Bytes

If read < 1 Then
'Es wurde nichts gelesen, bzw. ein Socket-Fehler trat auf
EndIf

buff[read-1] = 0 'Sicherstellen dass das letzte Byte eine 0 ist
rcv = String.FromCString(buff) 'String in BMAX-String konvertieren
 

Macintosh

BeitragFr, Jun 04, 2010 12:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok. Vielen Dank

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group