IdTCPServer1Execute 接收线程中,为什么不能同时接收字符串跟图片?
如果把它们分开可以正常接收,写在一起为啥不行?那么如何判断客户端传来的是汉字跟内存流呢?代码如下procedure TForm2.IdTCPServer1Execute(AThread: TIdPeerThread); ////接收发送信息线程
var
strem:TMemoryStream;
jpegimage:tjpegimage;
sCommand: string;
begin
with AThread.Connection do
begin
sCommand := ReadLn();//接收汉字
FLogEntry := sCommand + ' 来自于主机 '+ AThread.Connection.Socket.Binding.PeerIP;
AThread.Synchronize(AddLogEntry);
if AnsiStartsText('DATA ', sCommand) then
begin
FReceived := RightStr(sCommand, Length(sCommand)-5);
WriteLn('200: 数据接收成功!');
AThread.Synchronize(DisplayData);
end
else
if SameText(sCommand, 'QUIT') then
begin
FLogEntry := '断开同主机 ' + AThread.Connection.Socket.Binding.PeerIP+ ' 的连接!';
AThread.Synchronize(AddLogEntry);
Disconnect;
end
else
{ begin
WriteLn('500: 无法识别的命令!');
FLogEntry := '无法识别命令:' + sCommand;
AThread.Synchronize(AddLogEntry);
end;//endif }
begin //接收图片
strem:=TMemoryStream.Create;
AThread.Connection.ReadStream(strem,-1,False);
try
strem.Position:=0;
Image1.Picture.Graphic := nil;
jpegimage := tjpegimage.Create ;
jpegimage.LoadFromStream(strem);
Image1.Picture.Graphic:=jpegimage;
finally
strem.Free;
jpegimage.Free ;
AThread.Connection.WriteLn('服务器已收到图片');
end;
end;
end;
end;
如果把它们分开可以正常接收,写在一起为啥不行?那么如何判断客户端传来的是汉字跟内存流呢?代码如下procedure TForm2.IdTCPServer1Execute(AThread: TIdPeerThread); ////接收发送信息线程
var
strem:TMemoryStream;
jpegimage:tjpegimage;
sCommand: string;
begin
with AThread.Connection do
begin
sCommand := ReadLn();//接收汉字
FLogEntry := sCommand + ' 来自于主机 '+ AThread.Connection.Socket.Binding.PeerIP;
AThread.Synchronize(AddLogEntry);
if AnsiStartsText('DATA ', sCommand) then
begin
FReceived := RightStr(sCommand, Length(sCommand)-5);
WriteLn('200: 数据接收成功!');
AThread.Synchronize(DisplayData);
end
else
if SameText(sCommand, 'QUIT') then
begin
FLogEntry := '断开同主机 ' + AThread.Connection.Socket.Binding.PeerIP+ ' 的连接!';
AThread.Synchronize(AddLogEntry);
Disconnect;
end
else
{ begin
WriteLn('500: 无法识别的命令!');
FLogEntry := '无法识别命令:' + sCommand;
AThread.Synchronize(AddLogEntry);
end;//endif }
begin //接收图片
strem:=TMemoryStream.Create;
AThread.Connection.ReadStream(strem,-1,False);
try
strem.Position:=0;
Image1.Picture.Graphic := nil;
jpegimage := tjpegimage.Create ;
jpegimage.LoadFromStream(strem);
Image1.Picture.Graphic:=jpegimage;
finally
strem.Free;
jpegimage.Free ;
AThread.Connection.WriteLn('服务器已收到图片');
end;
end;
end;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货