计算机二级

3773考试网计算机等级考试计算机二级正文

基本TCP套接字编程

来源:fjzsksw.com 2010-4-7 10:04:07

 

  当使用TCP/IP协议一发客户服务器服务程序时,服务器需要等待任意数量客户端的连接,以便以他们提供服务。客户端连接服务器时,必须先知道服务器的名称。在TCP/IP中,就是服务器的IP地址和端口号。 bind()函数实现将服务器绑定到一个已知的名字上的功能。接下来要将服务器套接字设置为监听状态,这是通过listen()函数完成的。在监听状态下,如果客户端向服务器发起连接请求,服务器通过调用accept()函数来接受该连接请求。服务器与客户端完成连接后,就可以进行数据通信了。

  对客户端来说,首先调用connect()函数向服务器发出连接请求。如果服务器接受了该请求,接下来就可以与服务器通信了。

  开发套接字应用程序时,首先应进行Windows Sockets的初始化,加载Windows Sockets的实现,然后创建套接字,对TCP套接字来说,需要在socket()函数或都WSASocket()函数中指明SOCK_STREAM套接字类型。当服务器和客户端通信结束时,关闭套接字,释放Windows Sockets的实现。

  流程如下:

  服务器:创建套接字—>绑定—>监听—>接受连接—>收发数据—>关闭

  客户端:创建套接字—>连接—>收发数据—>关闭

  Windows Sockets API重要函数说明如下:

  一、WSAStartup()函数:

  不管是客户端还是服务器,开发Windows Sockets应用程序时,必须首先加载Windows Sockets动态库(DLL)。WSAStartup()函数实现此项功能。该函数是套接字        应用程序必须调用的第一个函数。

  该函数声明如下:

  int WSAStartup(

  WORD wVersionRequested,

  LPWSADATA lpWSAData

  );

  wVersionRequested:指定准备加载Windows Sockets动态库的版本。高字节指定所需要库文件的副版本,低字节指定主版本。在应用程序中可以使用MAKEWORD(X,Y)方便指定该参数。X是高位字节,Y是低位字节

  lpWSAData:指向lpwsadata结构的指针,该参数返回被加载动态库的有关信息。

  WSADATA结构声明如下:

  #define WSADESCRIPTION_LEN 256

  #define WSASYS_STATUS_LEN 128

  struct WSAData {

  WORD wVersion;

  WORD wHighVersion;

  char szDescription[WSADESCRIPTION_LEN+1];

  char szSystemStatus[WSASYSSTATUS_LEN+1];

  unsigned short iMaxSockets;

  unsigned short iMaxUdpDg;

  char *lpVendorInfo;};

  WSADATA结构被用来保存函数WSAStartup返回的Windows Sockets初始化信息。

  wVersion :Windows Sockets DLL期望调用者使用的Windows Sockets规范的版本。 高位字节存储副版本号, 低位字节存储主版本号,可以用WORD MAKEWORD(BYTE,BYTE ) 返回这个值,例如:MAKEWORD(1,1)

  wHighVersion :这个DLL能够支持的Windows Sockets规范的最高版本。通常它与wVersion相同。

  szDescription :以null结尾的ASCII字符串,Windows Sockets DLL将对Windows Sockets实现的描述拷贝到这个字符串中,包括制造商标识。文本(最多可以有256个字符)可以包含任何字符,但是要注意不能包含控制字符和格式字符,应用程序对其最可能的使用方式是把它(可能被截断)显示在在状态信息中。

  szSystemStatus :以null结尾的ASCII字符串,Windows Sockets DLL把有关的状态或配置信息拷贝到该字符串中。Windows Sockets DLL应当仅在这些信息对用户或支持人员有用时才使用它们,它不应被作为szDescription域的扩展。

  iMaxSockets :单个进出能够打开的socket的最大数目。

  iMaxUdpDg:一个进程发送或接收的最大数据报长度

  lpVendorInfo :指向销售商的数据结构的指针。这个结构的定义(如果有)超出了WindowsSockets规范的范围

 

[1] [2] [3] [4] 下一页

触屏版 电脑版
3773考试网 琼ICP备12003406号-1