📄 mainfrm.~pas
字号:
unit MainFrm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;
type
TfrmMain = class(TForm)
Label1: TLabel;
edtHost: TEdit;
btnConnect: TButton;
mmLog: TMemo;
csClient: TClientSocket;
procedure btnConnectClick(Sender: TObject);
procedure csClientConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure csClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure csClientError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure csClientRead(Sender: TObject; Socket: TCustomWinSocket);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
FStream: TMemoryStream;
procedure WriteLog(log: string);
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
procedure TfrmMain.btnConnectClick(Sender: TObject);
begin
csClient.Close;
csClient.Host := Trim(edtHost.Text);
csClient.Open;
end;
procedure TfrmMain.csClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
WriteLog(Format('连接%s成功,端口:%d', [csClient.Host, csClient.Port]));
end;
procedure TfrmMain.WriteLog(log: string);
begin
mmLog.Lines.Add(FormatDateTime('>YY-MM-DD HH:NN:SS*> ', Now) + log);
end;
procedure TfrmMain.csClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
WriteLog(Format('断开%s连接', [csClient.Host]));
end;
procedure TfrmMain.csClientError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
WriteLog(Format('连接%s错误,错误代码:%d', [csClient.Host, ErrorCode]));
ErrorCode := 0;
end;
procedure TfrmMain.csClientRead(Sender: TObject; Socket: TCustomWinSocket);
{var
Size: Integer;
Buffer: PChar;
begin
Size := Socket.ReceiveLength;
GetMem(Buffer, Size + 1);
Buffer[Size] := #0;
Socket.ReceiveBuf(Buffer^, Size);
if Copy(Buffer, 1, 4) = 'text' then
begin
WriteLog(StrPas(@Buffer[4]));
end
else if Copy(Buffer, 1, 4) = 'file' then
begin
FStream.Clear;
if Buffer[Size - 1] = 'E' then
begin
FStream.Write(Buffer[4], Size - 5);
WriteLog('接收文件完毕,大小:' + IntToStr(FStream.Size));
FStream.SaveToFile('C:\haha.bmp');
end
else
FStream.Write(Buffer[4], Size - 4);
end
else
begin
if Buffer[Size - 1] = 'E' then
begin
FStream.Write(Buffer^, Size - 1);
WriteLog('接收文件完毕,大小:' + IntToStr(FStream.Size));
FStream.SaveToFile('C:\haha.bmp');
end
else
FStream.Write(Buffer^, Size);
end;
FreeMem(Buffer);}
var
Size: Integer;
Buffer: array of char;
a:char;
begin
Size := Socket.ReceiveLength;
SetLength(Buffer, Size + 1);
Socket.ReceiveBuf(Buffer[0], Size);
WriteLog(StrPas(@Buffer[0]));
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
FStream := TMemoryStream.Create;
end;
procedure TfrmMain.FormDestroy(Sender: TObject);
begin
FStream.Free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -