unit Unit1;interfaceuses
Windows,winsock, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
btnFinger: TButton;
memInfo: TMemo;
Label1: TLabel;
edtHost: TEdit;
Label2: TLabel;
edtUser: TEdit;
procedure btnFingerClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var
WSAData:TWSAData;
begin
edtHost.Text:='10.13.101.10';
edtUser.Text:='sd10008022';
//1.初始化Winsock
if (WSAStartup(MAKEWORD(2,0),WSAData)<>0) then
begin
//初始化失败
memInfo.Lines.Add('Winsock Init Failed');
exit;
end
else
memInfo.Lines.Add('Socket Start');
end;
procedure TForm1.btnFingerClick(Sender: TObject);
var
Info:string;
BufSend,BufRecv:pchar;
skt:TSOCKET;
addr:TSockAddr;
Re:Integer;
begin
//2.建立socket
skt:=socket(AF_INET,SOCK_STREAM,0);
if(skt=INVALID_SOCKET)then
begin
memInfo.Lines.Add('Error:Create socket failed!');
exit;
end;
//3.连接主机
ZeroMemory(@addr,sizeof(addr));
addr.sin_family :=AF_INET;
addr.sin_addr.s_addr :=inet_addr(Pchar(edtHost.Text));
//Finger use #79 port
addr.sin_port:=htons(79);
Re := connect(skt,addr,sizeof(addr));
if(Re<>0)then
begin
memInfo.Lines.Add('Connect to server failed');
exit;
end;
//4.发送信息
GetMem(BufSend,1024);
ZeroMemory(BufSend,1024);
Info:=edtUser.Text+#10;
StrPCopy(BufSend,Info);
Re:=send(skt,BufSend^,Length(BufSend),0);
if(Re=SOCKET_ERROR)then
begin
memInfo.Lines.Add('Send Data Failed');
exit;
end;
//5.读取主机返回信息
GetMem(BufRecv,1024);
repeat
ZeroMemory(bufRecv,1024);
re := recv(skt, BufRecv^, 1024, 0);
Info:=StrPas(bufRecv);
memInfo.Lines.Add(Info);
Until re=0;
memInfo.Lines.Add('Finish');
FreeMem(BufSend);
FreeMem(BufRecv);
//6.关闭socket
closesocket(skt);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
//6.释放Winsock
WSACleanUP();
end;end.
Windows,winsock, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
btnFinger: TButton;
memInfo: TMemo;
Label1: TLabel;
edtHost: TEdit;
Label2: TLabel;
edtUser: TEdit;
procedure btnFingerClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var
WSAData:TWSAData;
begin
edtHost.Text:='10.13.101.10';
edtUser.Text:='sd10008022';
//1.初始化Winsock
if (WSAStartup(MAKEWORD(2,0),WSAData)<>0) then
begin
//初始化失败
memInfo.Lines.Add('Winsock Init Failed');
exit;
end
else
memInfo.Lines.Add('Socket Start');
end;
procedure TForm1.btnFingerClick(Sender: TObject);
var
Info:string;
BufSend,BufRecv:pchar;
skt:TSOCKET;
addr:TSockAddr;
Re:Integer;
begin
//2.建立socket
skt:=socket(AF_INET,SOCK_STREAM,0);
if(skt=INVALID_SOCKET)then
begin
memInfo.Lines.Add('Error:Create socket failed!');
exit;
end;
//3.连接主机
ZeroMemory(@addr,sizeof(addr));
addr.sin_family :=AF_INET;
addr.sin_addr.s_addr :=inet_addr(Pchar(edtHost.Text));
//Finger use #79 port
addr.sin_port:=htons(79);
Re := connect(skt,addr,sizeof(addr));
if(Re<>0)then
begin
memInfo.Lines.Add('Connect to server failed');
exit;
end;
//4.发送信息
GetMem(BufSend,1024);
ZeroMemory(BufSend,1024);
Info:=edtUser.Text+#10;
StrPCopy(BufSend,Info);
Re:=send(skt,BufSend^,Length(BufSend),0);
if(Re=SOCKET_ERROR)then
begin
memInfo.Lines.Add('Send Data Failed');
exit;
end;
//5.读取主机返回信息
GetMem(BufRecv,1024);
repeat
ZeroMemory(bufRecv,1024);
re := recv(skt, BufRecv^, 1024, 0);
Info:=StrPas(bufRecv);
memInfo.Lines.Add(Info);
Until re=0;
memInfo.Lines.Add('Finish');
FreeMem(BufSend);
FreeMem(BufRecv);
//6.关闭socket
closesocket(skt);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
//6.释放Winsock
WSACleanUP();
end;end.
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Winsock, ExtCtrls, StdCtrls, ComCtrls;type
TForm1 = class(TForm)
edtSend: TEdit;
Label1: TLabel;
btnSend: TButton;
edtEcho: TEdit;
Label5: TLabel;
btnConnect: TButton;
btnDisConnect: TButton;
edtPort: TEdit;
edtHost: TEdit;
Label4: TLabel;
Label3: TLabel;
Bevel1: TBevel;
StatusBar1: TStatusBar;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnConnectClick(Sender: TObject);
procedure btnDisConnectClick(Sender: TObject);
procedure btnSendClick(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
skt:TSocket;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
var
WSAData:TWSAData;
begin
//init Socket
if (WSAStartup(MAKEWORD(2,0),WSAData)<>0) then
begin
//初始化失败
StatusBar1.SimpleText:='Init Failed';
exit;
end
else
StatusBar1.SimpleText:='Init Success';
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
//release winsock
WSACleanUP();
end;procedure TForm1.btnConnectClick(Sender: TObject);
var
addr:TSockAddr;
Re:Integer;
begin
//create socket
skt:=socket(AF_INET,SOCK_STREAM,0);
if(skt=INVALID_SOCKET)then
begin
StatusBar1.SimpleText:='Error:Create socket failed!';
exit;
end;
//connect to host
ZeroMemory(@addr,sizeof(addr));
addr.sin_family :=AF_INET;
addr.sin_addr.s_addr :=inet_addr(Pchar(edtHost.Text));
//Finger use #79 port
addr.sin_port:=htons(StrToInt(edtPort.Text));
Re := connect(skt,addr,sizeof(addr));
if(Re<>0)then
begin
StatusBar1.SimpleText:='Connect to server failed';
exit;
end;
//Success Connect to host
StatusBar1.SimpleText:='Connect to server Success';
end;procedure TForm1.btnDisConnectClick(Sender: TObject);
var
re,err:integer;
info:string;
begin
//close socket
re:=closesocket(skt);
//judge result
if re=SOCKET_ERROR then
begin
err:=WSAGetLastError();
case err of
WSANOTINITIALISED:info:='Run WSAStartup first';
WSAENETDOWN:info:='The network subsystem has failed.';
WSAENOTSOCK:info:='The descriptor is not a socket.';
WSAEINPROGRESS:info:='Sockets busy';
WSAEINTR:info:='canceled through WSACancelBlockingCall.';
WSAEWOULDBLOCK:info:='time-out value to large';
end;
end
else
Info:='Close socket success';
StatusBar1.SimpleText:=info;
end;procedure TForm1.btnSendClick(Sender: TObject);
var
Info:string;
BufSend,BufRecv:pchar;
Re:Integer;
begin
//send message
GetMem(BufSend,1024);
ZeroMemory(BufSend,1024);
Info:=edtSend.Text;
StrPCopy(BufSend,Info);
Re:=send(skt,BufSend^,Length(BufSend),0);
if(Re=SOCKET_ERROR)then
begin
StatusBar1.SimpleText:='Send Data Failed';
exit;
end; //receive message
GetMem(BufRecv,1024);
ZeroMemory(bufRecv,1024);
re := recv(skt, BufRecv^, 1024, 0);
Info:=StrPas(bufRecv);
edtEcho.Text:=Info; //free pchar variant
FreeMem(BufSend);
FreeMem(BufRecv);
end;end.
以上例子,请仔细读...