在編制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 (杭州電子工業學院)
|