下面多层应用可以用来中转文字
unit Unit2;interfaceuses
Classes, StdCtrls, SysUtils, ScktComp;type
TMyServerThread = class(TServerClientThread)
private
{ Private declarations }
FMemo: TMemo;
FListBox: TListBox;
Buffer: array[0 .. 80] of Char;
protected
procedure ClientExecute; override;
procedure DoDisplayCreate;
procedure DoDisplayBuffer;
public
constructor Create(Memo: TMemo; ListBox: TListBox; CreateSuspended: Boolean; ASocket: TServerClientWinSocket);
end;implementation{ TMyServerThread }constructor TMyServerThread.Create(Memo: TMemo; ListBox: TListBox; CreateSuspended: Boolean; ASocket: TServerClientWinSocket);
begin
inherited Create(CreateSuspended,ASocket); FMemo := Memo;
FListBox := ListBox; Synchronize(DoDisplayCreate);
end;procedure TMyServerThread.DoDisplayCreate();
begin
{FlistBox.Items.Add('Client<' + ClientSocket.RemoteHost + ':' + IntToStr(ClientSocket.RemotePort) +
'> Server<' + ClientSocket.LocalHost + ':' + IntToStr(ClientSocket.LocalPort) +
'> SocketHandle<' + IntToStr(ClientSocket.SocketHandle) +
'> Thread<' + IntToStr(threadID) + '>' );
} { FMemo.Lines.Add('* Thread<' + IntToStr(threadID) + '> created!'); }
end;procedure TMyServerThread.DoDisplayBuffer(); //把接收到的信息显示到memo里,然后转发给其它客户
var
con: Integer;
begin
FMemo.Lines.Add('Thread<' + IntToStr(threadID) +
{ '> Server<' + ClientSocket.LocalHost + ':' + IntToStr(ClientSocket.LocalPort) + }
{ '> SocketHandle<' + IntToStr(ClientSocket.SocketHandle) + }
'> Client<' + ClientSocket.RemoteHost + ':' + IntToStr(ClientSocket.RemotePort) +
'> : '); // + Buffer ); for con:=0 to ClientSocket.ServerWinSocket.ActiveConnections-1 do
ClientSocket.ServerWinSocket.Connections[con].SendText('<' + ClientSocket.RemoteHost + ':' + IntToStr(ClientSocket.RemotePort) +
'> : ' + Buffer );
end;procedure TMyServerThread.ClientExecute; //线程执行函数
var
Stream : TWinSocketStream;
begin
{ make sure connection is active }
while (not Terminated) and ClientSocket.Connected do
begin
try
Stream := TWinSocketStream.Create(ClientSocket, 60000);
try
FillChar(Buffer, 80, 0); { initialize the buffer } if Stream.WaitForData(60000) then //等待6秒
begin
if Stream.Read(Buffer, 80)=0 then { if can't read in 60 seconds }
ClientSocket.Close; { close the connection } { now process the request }
Synchronize(DoDisplayBuffer); //把接收到的信息显示到memo里,然后转发给其它客户
end
else
{ ClientSocket.Close; } { if client doesn't start, close }
finally
Stream.Free;
end;
except
HandleException; //执行异常
end;
end;
end;
end.但我现要用来转送流,请问应改哪里!
unit Unit2;interfaceuses
Classes, StdCtrls, SysUtils, ScktComp;type
TMyServerThread = class(TServerClientThread)
private
{ Private declarations }
FMemo: TMemo;
FListBox: TListBox;
Buffer: array[0 .. 80] of Char;
protected
procedure ClientExecute; override;
procedure DoDisplayCreate;
procedure DoDisplayBuffer;
public
constructor Create(Memo: TMemo; ListBox: TListBox; CreateSuspended: Boolean; ASocket: TServerClientWinSocket);
end;implementation{ TMyServerThread }constructor TMyServerThread.Create(Memo: TMemo; ListBox: TListBox; CreateSuspended: Boolean; ASocket: TServerClientWinSocket);
begin
inherited Create(CreateSuspended,ASocket); FMemo := Memo;
FListBox := ListBox; Synchronize(DoDisplayCreate);
end;procedure TMyServerThread.DoDisplayCreate();
begin
{FlistBox.Items.Add('Client<' + ClientSocket.RemoteHost + ':' + IntToStr(ClientSocket.RemotePort) +
'> Server<' + ClientSocket.LocalHost + ':' + IntToStr(ClientSocket.LocalPort) +
'> SocketHandle<' + IntToStr(ClientSocket.SocketHandle) +
'> Thread<' + IntToStr(threadID) + '>' );
} { FMemo.Lines.Add('* Thread<' + IntToStr(threadID) + '> created!'); }
end;procedure TMyServerThread.DoDisplayBuffer(); //把接收到的信息显示到memo里,然后转发给其它客户
var
con: Integer;
begin
FMemo.Lines.Add('Thread<' + IntToStr(threadID) +
{ '> Server<' + ClientSocket.LocalHost + ':' + IntToStr(ClientSocket.LocalPort) + }
{ '> SocketHandle<' + IntToStr(ClientSocket.SocketHandle) + }
'> Client<' + ClientSocket.RemoteHost + ':' + IntToStr(ClientSocket.RemotePort) +
'> : '); // + Buffer ); for con:=0 to ClientSocket.ServerWinSocket.ActiveConnections-1 do
ClientSocket.ServerWinSocket.Connections[con].SendText('<' + ClientSocket.RemoteHost + ':' + IntToStr(ClientSocket.RemotePort) +
'> : ' + Buffer );
end;procedure TMyServerThread.ClientExecute; //线程执行函数
var
Stream : TWinSocketStream;
begin
{ make sure connection is active }
while (not Terminated) and ClientSocket.Connected do
begin
try
Stream := TWinSocketStream.Create(ClientSocket, 60000);
try
FillChar(Buffer, 80, 0); { initialize the buffer } if Stream.WaitForData(60000) then //等待6秒
begin
if Stream.Read(Buffer, 80)=0 then { if can't read in 60 seconds }
ClientSocket.Close; { close the connection } { now process the request }
Synchronize(DoDisplayBuffer); //把接收到的信息显示到memo里,然后转发给其它客户
end
else
{ ClientSocket.Close; } { if client doesn't start, close }
finally
Stream.Free;
end;
except
HandleException; //执行异常
end;
end;
end;
end.但我现要用来转送流,请问应改哪里!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货