您的位置:首页 > 编程语言 > Delphi

Delphi实现winsock编程之一(winsock概述及其加载)

2010-12-23 14:41 357 查看
Winsock是Windows实现socket端口的标准API,它从BSD Socket(套接字中)继承了大量的特性。有点需要说明的是Winsock并不是网络协议。Winsock目前为止有两个主要版本Winsock1和Winsock2。(winsock1往往会省略掉后面的1,本文也遵从此默认规则)。到目前为止Windows98以后的Windows版本(包括windows nt4.0)都支持winsock2,而windows95和windows CE却只支持Winsock1。
Delphi默认只支持Winsock1。此时只需要在 uses字段中引入 Winsock。
代码1.1


uses
Windows, Messages, SysUtils, Classes, WinSock;


而Winsock2需要额外的支持。Winsock2可以从http://www.wesoho.com/article.asp?id=1811下载。


winsock1相对简单。我们的例子从Winsock1开始说起。


首先在调用winsock前,需要加载Winsock的DLL版本,如果加载错误则返回一个SOCKET_ERROR错误信息为WSANOTINITIALISED。加载winsock库通过调用WSAStartup函数实现,此函数的格式如下:

function WSAStartup(wVersionRequired: word; var WSData: TWSAData): Integer; stdcall;


如果加载成功,则会在WSData中填充相关数据,其中TWSAData的定义如下:
[code]  WSAData = record // !!! also WSDATA
wVersion: Word;
wHighVersion: Word;
szDescription: array[0..WSADESCRIPTION_LEN] of Char;
szSystemStatus: array[0..WSASYS_STATUS_LEN] of Char;
iMaxSockets: Word;
iMaxUdpDg: Word;
lpVendorInfo: PChar;
end;
TWSAData = WSAData;


简单说明此字段的作用


wVersion为即将使用winsock版本。wHighVersion为现有Winsock库的最高版本,其中高字节为winsock次版本,低字节为winsock主版本。


szDescription和szSystemStatus为描述和特殊设置,并无实际含义。


iMaxSockets和iMaxUdpDg为同时打开的最大套接字数和数据报最大长度。(在现实使用中此两数据会受物理条件和使用协议限制)


lpVendorInfo目前保留。


看以下代码


if WSAStartup($0101,aWSAData)<>0 then
begin
MessageBox(Handle,'不能启动winsock动态链接库!','错误',MB_OK);
Exit;
end;
MessageBox(Handle,aWSAData.szDescription,'WinSock 态链接库版本',MB_OK);

改代码就是启动winsock 1.1版本,并提示。

 


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: