使用winsock Api实现finger
2008-04-09 04:28:56来源:互联网 阅读 ()
在编制Winsocket程序的时候,要有一些必要的步骤:
1、初始化Winsock动态连接库;
2、建立一个Winsock对象。
3、连接主机。
4、和主机进行数据交流。
5、关闭Socket对象
6、释放Winsoket动态链接库。
下面是一个使用winsock Api实现finger实现的源程序:在delphi6中调试通过。
unit finger;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,winsock, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
edtHost: TEdit;
btnFinger: TButton;
edtUser: TEdit;
memInfo: TMemo;
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.btnFingerClick(Sender: TObject);
var
Info:string;//服务器返回的用户信息
BufSend,BufRev:pChar;//中间信息
skt:TSOCKET;//创建Socket对象
addr:TSockAddr;//地址信息
Re:Integer;
begin
//1、建立Socket
skt:=socket(AF_INET,SOCK_STREAM,0);
if(skt=INVALID_SOCKET)Then
begin
memInfo.Lines.Add(''''Error:Create Winsock Failed'''');
exit;
end;
//2、连接主机
ZeroMemory(@addr,sizeof(addr));
Addr.sin_family:=AF_INET;
Addr.sin_addr.S_addr:=inet_addr(Pchar(edtHost.Text));
//开放79端口
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;
//3、发送信息
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(BufRev,1024);
Repeat
ZeroMemory(BufRev,1024);
re:=recv(skt,BufRev^,1024,0);
Info:=Strpas(bufRev);
memInfo.Lines.Add(Info);
Until re=0;
memInfo.Lines.Add(''''FINISH!'''');
FreeMem(BufSend);
FreeMem(BufRev);
//6、关闭socket连接
closesocket(skt);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
WSAData:TWSAData; //是TWSAData类型的变量,系统把加载的版本信息添加到这个结构中
begin
//初始化Winsock
if(WSAStartup(MAKEWORD(2,0),WSAData)<>0)then
begin
//初始化失败
memInfo.Lines.Add(''''Winsock Init Failed!'''');
exit;
end
else
memInfo.Lines.Add(''''Winsock Start!'''');
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
WSACleanUP();
end;
end.
如果有什么问题,请联系 qiujianben@163.com (杭州电子工业学院)
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash