hallo leute,
ich habe mal wieder was ....
mein server soll daten über tcp vom einem client empfangen.
ich habe mir testclients geschrieben die mir daten schicken,
es sind immer streams, die aus einer unbestimmten anzahl von integer werten und einer xml datei bestehen.
integer können aus internet/net byteorder oder host byteorder bestehen, ist erst mal egeal.
der server basiert auf "TServerSocket".
wenn ich nun daten mit "idTcpClient" schicke, funktioniert alles!
code
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
| var _Stream: TMemoryStream; sLen, tLen : integer; IntValue: integer; ntLen: LongWord; begin
_Stream:= TMemoryStream.Create; _Stream.Position:= 0; sLen:= length(Memo1.Lines.Text); tLen:= sLen+36; _Stream.Size:= tLen; _Stream.WriteBuffer(tLen, 4);
IntValue:= StrToInt(ePacketType.Text); _Stream.WriteBuffer(IntValue, 4); IntValue:= StrToInt(eGsmSen.Text); _Stream.WriteBuffer(IntValue, 4); IntValue:= StrToInt(eGsmEmpf.Text); _Stream.WriteBuffer(IntValue, 4); IntValue:= StrToInt(eMsgType.Text); _Stream.WriteBuffer(IntValue, 4); IntValue:= StrToInt(eTimeOut.Text); _Stream.WriteBuffer(IntValue, 4); IntValue:= StrToInt(ePrio.Text); _Stream.WriteBuffer(IntValue, 4);
IntValue:= StrToInt(eRetryC.Text); _Stream.WriteBuffer(IntValue, 4);
_Stream.WriteBuffer(sLen, 4);
Memo1.Lines.SaveToStream(_Stream);
TcpClient.OpenWriteBuffer;
TcpClient.WriteStream(_Stream);
TcpClient.CloseWriteBuffer;
_Stream.Free;
end; |
wenn ich nun mit TClientSocket daten schicke, komm nur müll an
code
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43:
| var _WinSocketStream: TWinSocketStream; _Stream: TMemoryStream; sLen, tLen : integer; IntValue: integer; ntLen: LongWord; begin
_Stream:= TMemoryStream.Create; _Stream.Position:= 0;
sLen:= length(Memo1.Lines.Text); tLen:= sLen+36; _Stream.Size:= tLen;
_Stream.WriteBuffer(tLen, 4);
IntValue:= StrToInt(ePacketType.Text); _Stream.WriteBuffer(IntValue, 4); IntValue:= StrToInt(eGsmSen.Text); _Stream.WriteBuffer(IntValue, 4); IntValue:= StrToInt(eGsmEmpf.Text); _Stream.WriteBuffer(IntValue, 4); IntValue:= StrToInt(eMsgType.Text); _Stream.WriteBuffer(IntValue, 4); IntValue:= StrToInt(eTimeOut.Text); _Stream.WriteBuffer(IntValue, 4); IntValue:= StrToInt(ePrio.Text); _Stream.WriteBuffer(IntValue, 4); IntValue:= StrToInt(eRetryC.Text); _Stream.WriteBuffer(IntValue, 4);
_Stream.WriteBuffer(sLen, 4);
Memo1.Lines.SaveToStream(_Stream);
_WinSocketStream:= TWinSocketStream.Create(SockClient.Socket, 200); _WinSocketStream.Write(_Stream, tLen); _WinSocketStream.Free; _Stream.Free; end; |
erster wert "tLen" ist 49 (hbo)
bei idTcpClient = 49
bei TServerSocket = 9358808
lasst mich nicht dumm sterben.
hat jeman ne idee
thx
pp