Problem mit TCP-Stream

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Czybik88

Betreff: Problem mit TCP-Stream

BeitragSo, März 29, 2009 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

wenn ich bei einem TCP-Stream einen String auslesen will, dann crasht mein Server, wenn ich aber
nur Bytes auslese, dann crasht er nicht. Mit welchen Strings kann den BB3D umgehen? Weil mein Server
in C++ geschrieben ist...

Mein Datenpuffer sieht so aus:

BYTE number;
char ident[250];
BYTE last;

MfG

Noobody

BeitragSo, März 29, 2009 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Blitz - Strings sind nicht nullterminiert wie in C/++, sondern bestehen aus einem Integer mit der Anzahl Buchstaben im String, gefolgt vom String selbst.

Aus deinem Datenpuffer wurde ich nicht ganz schlau, aber es scheint nicht ganz der Blitzdarstellung zu entsprechen.

Wenn es dann immer noch nicht klappt: Kann sein, dass Blitz einen anderen Endian benutzt. Einfach die Bytefolge vertauschen, dann sollte es gehen.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun
 

Czybik88

BeitragSa, Apr 04, 2009 6:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, danke.

Xaymar

ehemals "Cgamer"

BeitragSa, Apr 04, 2009 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
dafür hatte ich was geschrieben(bb, b3d, b+):
Code: [AUSKLAPPEN]
Function WriteStringNew(Stream, Strng$)
   If Stream <> 0
      Ln = Len(Strng$)
      For Pos = 1 To Ln
         WriteByte Stream, Asc(Mid(Strng$, Pos, 1))
      Next
      WriteByte Stream, 0
      Return 1
   Else
      Return 0
   EndIf
End Function

Function WriteFloatNew(F#)   ;Min=0, Max=4294967296
   If Stream <> 0         ;BB: Min=-2147483647, Max=2147483648   (Not Sure)
      Byte1 = F# And $FF
      Byte2 = ((F# And $FF00) Shl 8)
      Byte3 = ((F# And $FF0000) Shl 16)
      Byte4 = ((F# And $FF000000) Shl 24)
      WriteByte Stream, Byte1
      WriteByte Stream, Byte2
      WriteByte Stream, Byte3
      WriteByte Stream, Byte4
      Return 1
   Else
      Return 0
   EndIf
End Function

Function WriteInt32New(Stream, Int32)   ;Min=0, Max=4294967296
   If Stream <> 0                  ;BB: Min=-2147483647, Max=2147483648   (Not Sure)
      Byte1 = Int32 And $FF
      Byte2 = ((Int32 And $FF00) Shl 8)
      Byte3 = ((Int32 And $FF0000) Shl 16)
      Byte4 = ((Int32 And $FF000000) Shl 24)
      WriteByte Stream, Byte1
      WriteByte Stream, Byte2
      WriteByte Stream, Byte3
      WriteByte Stream, Byte4
      Return 1
   Else
      Return 0
   EndIf
End Function

Function WriteInt24New(Stream, Int24)   ;Min=0, Max=16777216
   If Stream <> 0                  ;BB: Min=-8388607, Max=8388608      (Not Sure)
      Byte1 = Int32 And $FF
      Byte2 = ((Int32 And $FF00) Shl 8)
      Byte3 = ((Int32 And $FF0000) Shl 16)
      WriteByte Stream, Byte1
      WriteByte Stream, Byte2
      WriteByte Stream, Byte3
      Return 1
   Else
      Return 0
   EndIf
End Function

Function WriteShortNew(Stream, Short)   ;Min=0, Max=65535
   If Stream <> 0                  ;BB: Min=-32767, Max=32768         (Not Sure)
      Byte1 = Int32 And $FF
      Byte2 = ((Int32 And $FF00) Shl 8)
      WriteByte Stream, Byte1
      WriteByte Stream, Byte2
      Return 1
   Else
      Return 0
   EndIf
End Function

Function ReadStringNew$(Stream)
   If WaitOnData(Stream, 2500) = 1
      While Not Eof(TCPS)
         Byte = ReadByte(Stream)
         If Byte > 0
            Out$ = Out$ + Chr(Byte)
         Else
            Return Out$
         EndIf
      Wend
      Return ""
   EndIf
   Return ""
End Function

Function ReadFloatNew#(Stream)
   If WaitOnData(Stream, 2500) = 1
      Byte1 = ReadByte(Stream)
      Byte2 = ReadByte(Stream)
      Byte3 = ReadByte(Stream)
      Byte4 = ReadByte(Stream)
      F# = (Byte4 Shr 24) Or (Byte3 Shr 16) Or (Byte2 Or 8) Or Byte1
      Return F#
   EndIf
   Return 0
End Function

Function ReadInt32New(Stream)
   If WaitOnData(Stream, 2500) = 1
      Byte1 = ReadByte(Stream)
      Byte2 = ReadByte(Stream)
      Byte3 = ReadByte(Stream)
      Byte4 = ReadByte(Stream)
      Integ = (Byte4 Shr 24) Or (Byte3 Shr 16) Or (Byte2 Or 8) Or Byte1
      Return Integ
   EndIf
   Return 0
End Function

Function ReadInt24New(Stream)
   If WaitOnData(Stream, 2500) = 1
      Byte1 = ReadByte(Stream)
      Byte2 = ReadByte(Stream)
      Byte3 = ReadByte(Stream)
      Integ = (Byte3 Shr 16) Or (Byte2 Shr 8) Or Byte1
      Return Integ
   EndIf
   Return 0
End Function

Function ReadShortNew(Stream)
   If WaitOnData(Stream, 2500) = 1
      Byte1 = ReadByte(Stream)
      Byte2 = ReadByte(Stream)
      Short = (Byte2 Shr 8) Or Byte1
      Return Short
   EndIf
   Return 0
End Function

Function WaitOnData(Stream, TimeOut=10000)
   MSec = MilliSecs()
   While Eof(Stream)
      If MilliSecs()-MSec
         Return 0
      EndIf
      WaitTimer RespTimer
   Wend
   Return 1
End Function

Function WriteData(Stream, Dat$)
   For A = 1 To Len(Dat$)
      WriteByte Stream, Asc(Mid(Dat$, A, 1))
   Next
   Return 1
End Function

Function AddString$(Dat$, Txt$)
   Dat$ = Dat$ + Txt$ + Chr(0)
   Return Dat$
End Function

Function AddString2$(Dat$, Txt$)
   Dat$ = Dat$ + Txt$
   Return Dat$
End Function

Function AddInt$(Dat$, I)
   Byte1 = Int32 And $FF
   Byte2 = ((Int32 And $FF00) Shl 8)
   Byte3 = ((Int32 And $FF0000) Shl 16)
   Byte4 = ((Int32 And $FF000000) Shl 24)
   Dat$ = Dat$ + Chr(Byte1) + Chr(Byte2) + Chr(Byte3) + Chr(Byte4)
   Return Dat$
End Function

Function AddSmallInt$(Dat$, I)
   Byte1 = Int32 And $FF
   Byte2 = ((Int32 And $FF00) Shl 8)
   Byte3 = ((Int32 And $FF0000) Shl 16)
   Dat$ = Dat$ + Chr(Byte1) + Chr(Byte2) + Chr(Byte3)
   Return Dat$
End Function

Function AddShort$(Dat$, S)
   Byte1 = Int32 And $FF
   Byte2 = ((Int32 And $FF00) Shl 8)
   Dat$ = Dat$ + Chr(Byte1) + Chr(Byte2)
   Return Dat$
End Function

Function AddByte$(Dat$, B)
   Dat$ = Dat$ + Chr(B)
   Return Dat$
End Function
Warbseite

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group