客户端代码:ar
fStream:TMemoryStream;
i:integer;
s:String;
begin
Result:=false;
IDClient.Host:=hostname;
IDClient.Port:=6060;
try
IDClient.Connect(5000);
try
edLog.Items.Add(hostname+sfile);
fStream:=TMemoryStream.Create;
IDClient.WriteLn(sfile);
try
IDClient.ReadStream(fStream,qryRecordfsize.AsInteger);
except
ShowMessage('读文件失败!');
IDClient.Disconnect;
Exit;
end;
if FileExists(ExtractFilePath(paramStr(0))+'temp.wav') then
DeleteFile(ExtractFilePath(paramStr(0))+'temp.wav');
fStream.SaveToFile(ExtractFilePath(paramStr(0))+'temp.wav');
fStream.Free;
try
MediaPlayer1.DeviceType:=dtAutoSelect;
MediaPlayer1.FileName:=ExtractFilePath(paramStr(0))+'temp.wav';
MediaPlayer1.Open;
MediaPlayer1.Play;
except
ShowMessage('播放失败,请确认文件是否存在或者文件是否已经损坏');
IDClient.Disconnect;
end;
except
edLog.Items.Add('远程主机无相应') ;
IDClient.Disconnect;
Exit;
end;
except
edLog.Items.add('连接服务器'+hostname+'失败!');
Exit;
end;服务器端代码:
procedure TfrmServer.btnDisConnectClick(Sender: TObject);
begin
if IDServer.Active then IDServer.Active:=false;
btnConnect.Enabled:=true;
btnDisConnect.Enabled:=false;
end;procedure TfrmServer.btnConnectClick(Sender: TObject);
begin
try
IDServer.Active:=true;
except
MessageBox(Handle,'服务器激活失败!','提示',MB_OK+MB_ICONINFORMATION);
end;
MessageBox(Handle,'服务器激活成功!','提示',MB_OK+MB_ICONINFORMATION);
btnConnect.Enabled:=false;
btnDisconnect.Enabled:=true;
end;procedure TfrmServer.IDServerExecute(AThread: TIdPeerThread);
var
filePath:String;
i,fSize:Integer;
fileStream:TMemoryStream;
begin
filePath:=AThread.Connection.ReadLn();
edLog.Items.Add(filepath);
if filepath<>'' then
begin
i:=Pos(filepath,'SI') ;
fsize:=StrToInt(copy,1,i); fileStream:=TMemoryStream.Create;
fileStream.LoadFromFile(trim(copy(filepath,i+2,len(filepath)-i-1));
AThread.Connection.WriteStream(fileStream);
fileStream.Free;
end;
end;procedure TfrmServer.FormCreate(Sender: TObject);
begin
Clients:= TThreadList.Create;
IDServer.Active:=false;
btnConnect.Enabled:=true;
btnDisConnect.Enabled:=false;
end;procedure TfrmServer.FormClose(Sender: TObject; var Action: TCloseAction);
begin
try
if IDServer.Active then IDServer.Active:=false;
except
end;
Clients.Free;
end;procedure TfrmServer.IDServerConnect(AThread: TIdPeerThread);
begin
edLog.Items.Add('来自'+AThread.Connection.Socket.Binding.PeerIP+'的连接已经被接纳');
AThread.Connection.WriteLn('100:欢迎连接Tcp服务器');
end;
fStream:TMemoryStream;
i:integer;
s:String;
begin
Result:=false;
IDClient.Host:=hostname;
IDClient.Port:=6060;
try
IDClient.Connect(5000);
try
edLog.Items.Add(hostname+sfile);
fStream:=TMemoryStream.Create;
IDClient.WriteLn(sfile);
try
IDClient.ReadStream(fStream,qryRecordfsize.AsInteger);
except
ShowMessage('读文件失败!');
IDClient.Disconnect;
Exit;
end;
if FileExists(ExtractFilePath(paramStr(0))+'temp.wav') then
DeleteFile(ExtractFilePath(paramStr(0))+'temp.wav');
fStream.SaveToFile(ExtractFilePath(paramStr(0))+'temp.wav');
fStream.Free;
try
MediaPlayer1.DeviceType:=dtAutoSelect;
MediaPlayer1.FileName:=ExtractFilePath(paramStr(0))+'temp.wav';
MediaPlayer1.Open;
MediaPlayer1.Play;
except
ShowMessage('播放失败,请确认文件是否存在或者文件是否已经损坏');
IDClient.Disconnect;
end;
except
edLog.Items.Add('远程主机无相应') ;
IDClient.Disconnect;
Exit;
end;
except
edLog.Items.add('连接服务器'+hostname+'失败!');
Exit;
end;服务器端代码:
procedure TfrmServer.btnDisConnectClick(Sender: TObject);
begin
if IDServer.Active then IDServer.Active:=false;
btnConnect.Enabled:=true;
btnDisConnect.Enabled:=false;
end;procedure TfrmServer.btnConnectClick(Sender: TObject);
begin
try
IDServer.Active:=true;
except
MessageBox(Handle,'服务器激活失败!','提示',MB_OK+MB_ICONINFORMATION);
end;
MessageBox(Handle,'服务器激活成功!','提示',MB_OK+MB_ICONINFORMATION);
btnConnect.Enabled:=false;
btnDisconnect.Enabled:=true;
end;procedure TfrmServer.IDServerExecute(AThread: TIdPeerThread);
var
filePath:String;
i,fSize:Integer;
fileStream:TMemoryStream;
begin
filePath:=AThread.Connection.ReadLn();
edLog.Items.Add(filepath);
if filepath<>'' then
begin
i:=Pos(filepath,'SI') ;
fsize:=StrToInt(copy,1,i); fileStream:=TMemoryStream.Create;
fileStream.LoadFromFile(trim(copy(filepath,i+2,len(filepath)-i-1));
AThread.Connection.WriteStream(fileStream);
fileStream.Free;
end;
end;procedure TfrmServer.FormCreate(Sender: TObject);
begin
Clients:= TThreadList.Create;
IDServer.Active:=false;
btnConnect.Enabled:=true;
btnDisConnect.Enabled:=false;
end;procedure TfrmServer.FormClose(Sender: TObject; var Action: TCloseAction);
begin
try
if IDServer.Active then IDServer.Active:=false;
except
end;
Clients.Free;
end;procedure TfrmServer.IDServerConnect(AThread: TIdPeerThread);
begin
edLog.Items.Add('来自'+AThread.Connection.Socket.Binding.PeerIP+'的连接已经被接纳');
AThread.Connection.WriteLn('100:欢迎连接Tcp服务器');
end;
edLog.Items.Add('来自'+AThread.Connection.Socket.Binding.PeerIP+'的连接已经被接纳');
AThread.Connection.WriteLn('100:欢迎连接Tcp服务器');
下面这一句多余了。