秦
秦野明
Unregistered / Unconfirmed
GUEST, unregistred user!
我要通过socket发送消息,也可能通过socket发送文件,都是以MemoryStream形式发送的,到对方机器上以后有什么办法能够辨认出这些应该是字符型的消息还是文件流?
如果能在流前面打上标识,如何打呢?
我现在是用自己定义的一个记录来发送,前面的StreamType表明流的类型,例如是字符流,文件流,根据这个StreamType做不同的处理。但是不成功
TReceiveStream=record
StreamType:string[100];
sFileStream:TMomeryStream;
end;
发送的时候
procedure TForm1.Button4Click(Sender: TObject);
var
SendStream:TReceiveStream;
XMLList:TStringList;
begin
SendStream.StreamType:='xml';
XMLList……创建并赋值StringList的过程
SendStream.sFileStream:=TMomeryStream.Create;
XMLList.SaveToStream( SendStream.sFileStream);
IdUDPClient1.Host:=RemoHostIP.Text;
IdUDPClient1.Port:=strtoint(Edit_FilePort.Text);
IdUDPClient1.Active:=true;
IdUDPClient1.SendBuffer(TempStream,sizeof(TempStream));
end;
接受的时候
procedure TForm_FaxServer.IdUDPServer1UDPRead(Sender: TObject;
AData: TStream; ABinding: TIdSocketHandle);
var
ReceiveStream :TReceiveStream;
XMLFile:TStringList;
StreamLength:integer;
begin
ReceiveStream.sFileStream:=TMomeryStream.Create;
StreamLength:=AData.Size;
AData.ReadBuffer(ReceiveStream,AData.Size);
showmessage(ReceiveStream.StreamType);
ReceiveStream.FileStream.Position:=0;(这里出错)
XMLFile.LoadFromStream(ReceiveStream.sFileStream);(如果上句去掉这里就出错)
end;
可以正常显示ReceiveStream.StreamType这个值,但是不能访问ReceiveStream.sFileStream这个值,是不是我这样定义记录是不对的,还是我取流的方法有错呢?或者是给流打上标识的方法不应该用记录的方式呢?
如果能在流前面打上标识,如何打呢?
我现在是用自己定义的一个记录来发送,前面的StreamType表明流的类型,例如是字符流,文件流,根据这个StreamType做不同的处理。但是不成功
TReceiveStream=record
StreamType:string[100];
sFileStream:TMomeryStream;
end;
发送的时候
procedure TForm1.Button4Click(Sender: TObject);
var
SendStream:TReceiveStream;
XMLList:TStringList;
begin
SendStream.StreamType:='xml';
XMLList……创建并赋值StringList的过程
SendStream.sFileStream:=TMomeryStream.Create;
XMLList.SaveToStream( SendStream.sFileStream);
IdUDPClient1.Host:=RemoHostIP.Text;
IdUDPClient1.Port:=strtoint(Edit_FilePort.Text);
IdUDPClient1.Active:=true;
IdUDPClient1.SendBuffer(TempStream,sizeof(TempStream));
end;
接受的时候
procedure TForm_FaxServer.IdUDPServer1UDPRead(Sender: TObject;
AData: TStream; ABinding: TIdSocketHandle);
var
ReceiveStream :TReceiveStream;
XMLFile:TStringList;
StreamLength:integer;
begin
ReceiveStream.sFileStream:=TMomeryStream.Create;
StreamLength:=AData.Size;
AData.ReadBuffer(ReceiveStream,AData.Size);
showmessage(ReceiveStream.StreamType);
ReceiveStream.FileStream.Position:=0;(这里出错)
XMLFile.LoadFromStream(ReceiveStream.sFileStream);(如果上句去掉这里就出错)
end;
可以正常显示ReceiveStream.StreamType这个值,但是不能访问ReceiveStream.sFileStream这个值,是不是我这样定义记录是不对的,还是我取流的方法有错呢?或者是给流打上标识的方法不应该用记录的方式呢?