📄 echo.pas
字号:
unit echo;
interface
uses
Classes, blcksock, winsock;
type
TTCPEchoDaemon = class(TThread)
private
Sock:TTCPBlockSocket;
public
Constructor Create;
Destructor Destroy; override;
procedure Execute; override;
end;
TTCPEchoThrd = class(TThread)
private
Sock:TTCPBlockSocket;
public
Constructor Create (hsock:tSocket);
Destructor Destroy; override;
procedure Execute; override;
end;
implementation
{ TEchoDaemon }
Constructor TTCPEchoDaemon.Create;
begin
sock:=TTCPBlockSocket.create;
FreeOnTerminate:=true;
Priority:=tpNormal;
inherited create(false);
end;
Destructor TTCPEchoDaemon.Destroy;
begin
Sock.free;
end;
procedure TTCPEchoDaemon.Execute;
var
ClientSock:TSocket;
begin
with sock do
begin
CreateSocket;
setLinger(true,10);
bind('0.0.0.0','echo');
listen;
repeat
if terminated then break;
if canread(1000) then
begin
ClientSock:=accept;
if lastError=0 then TTCPEchoThrd.create(ClientSock);
end;
until false;
end;
end;
{ TEchoThrd }
Constructor TTCPEchoThrd.Create(Hsock:TSocket);
begin
sock:=TTCPBlockSocket.create;
Sock.socket:=HSock;
FreeOnTerminate:=true;
Priority:=tpNormal;
inherited create(false);
end;
Destructor TTCPEchoThrd.Destroy;
begin
Sock.free;
end;
procedure TTCPEchoThrd.Execute;
var
b:byte;
begin
with sock do
begin
repeat
if terminated then break;
b:=recvbyte(60000);
if lastError<>0 then break;
sendbyte(b);
if lastError<>0 then break;
until false;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -