📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows,winsock, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TfrmMain = class(TForm)
btnFinger: TButton;
memo1: TMemo;
Label1: TLabel;
edtHostName: TEdit;
Label2: TLabel;
edtUserName: TEdit;
procedure btnFingerClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.DFM}
procedure TfrmMain.btnFingerClick(Sender: TObject);
var
Info:string;
SendBuf,RecvBuf:pchar;
socket1:TSOCKET;
addr:TSockAddr;
Re:Integer;
begin
//建立socket
socket1:=socket(AF_INET,SOCK_STREAM,0);
if(socket1=INVALID_SOCKET)then
begin
Memo1.Lines.Add('错误:建立socket失败');
exit;
end;
//连接主机
ZeroMemory(@addr,sizeof(addr));
addr.sin_family :=AF_INET;
addr.sin_addr.s_addr :=inet_addr(Pchar(edtHostName.Text));
//Finger use #79 port
addr.sin_port:=htons(79);
Re := connect(socket1,addr,sizeof(addr));
if(Re<>0)then
begin
Memo1.Lines.Add('连接服务器失败');
exit;
end;
//发送信息
GetMem(SendBuf,1024);
ZeroMemory(SendBuf,1024);
Info:=edtUserName.Text+#10;
StrPCopy(SendBuf,Info);
Re:=send(socket1,SendBuf^,Length(SendBuf),0);
if(Re=SOCKET_ERROR)then
begin
Memo1.Lines.Add('发送数据失败');
exit;
end;
//读取主机返回信息
GetMem(Recvbuf,1024);
repeat
ZeroMemory(Recvbuf,1024);
re := recv(socket1, Recvbuf^, 1024, 0);
Info:=StrPas(Recvbuf);
Memo1.Lines.Add(Info);
Until re=0;
Memo1.Lines.Add('结束');
FreeMem(SendBuf);
FreeMem(Recvbuf);
//关闭socket
closesocket(socket1);
end;
procedure TfrmMain.FormCreate(Sender: TObject);
var
WSAData:TWSAData;
begin
edtHostName.Text:='166.111.136.2';
edtUserName.Text:='Anonymous';
//初始化Winsock
if (WSAStartup(MAKEWORD(2,0),WSAData)<>0) then
begin
//初始化失败
memo1.Lines.Add('Winsock初始化失败');
exit;
end
else
Memo1.Lines.Add('Socket开始运行');
end;
procedure TfrmMain.FormDestroy(Sender: TObject);
begin
//释放Winsock
WSACleanUP();
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -