用两个TServerSocket,一个用来作通信命令处理,一个专门用来传数据,
用Server的数据传输用的TServerSocket使用Thred Socket;
下例是传送一个文件,在10M网内200KB大约一秒多种
procedure TfrmMain.ServerSock_DataGetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
begin
SocketThread := TScreenServerThread.Create(False, ClientSocket);
end;
procedure TScreenServerThread.ClientExecute;
var
FName : string;
begin
while not Terminated and ClientSocket.Connected do
try
if ClientSocket.Connected then
begin
FName := TempPath + 'temp.wav';
if FileExists(FName) then
ClientSocket.SendStream(TFileStream.Create(FName,
fmOpenRead or fmShareCompat or fmShareDenyNone));
ClientSocket.Close;
end;
end;
except
end;
end;
接收方ReceiveMem为TMoneyStream;ClientSocket.Open就可以了
procedure Tfrm_MasterWindow.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Temp : string;
begin
Temp := Socket.ReceiveText;
ReceiveMem.Write(PChar(Temp)^, Length(Temp));
end;
procedure Tfrm_MasterWindow.ClientSocketDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
var
FileSt : string;
begin
//TransfSize由通信方先得到
if TransfSize <> ReceiveMem.Size then Exit;
FileSt := Format('%s.jpg',[Socket.RemoteAddress]);
ReceiveMem.SaveToFile(FileSt);
end;