1130 WINSOCK的API编程开发,一

本文详细介绍在VC中使用WINSOCK API进行网络编程的方法,包括初始化、建立Socket、绑定端口、监听等步骤,适合初学者入门学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

VC中进行WINSOCKAPI编程开发的时候,需要在项目中使用下面三个文件,否则会出现编译错误。

  1WINSOCK.H: 这是WINSOCK API的头文件,需要包含在项目中。

  2WSOCK32.LIB: WINSOCK API连接库文件。在使用中,一定要把它作为项目的非缺省的连接库包含到项目文件中去。

  3WINSOCK.DLL: WINSOCK的动态连接库,位于WINDOWS的安装目录下。

 

  一、服务器端操作 socket(套接字)

  1)在初始化阶段调用WSAStartup()

  此函数在应用程序中初始化Windows Sockets DLL ,只有此函数调用成功后,应用程序才可以再调用其他Windows Sockets DLL中的API函数。在程式中调用该函数的形式如下:WSAStartup((WORD)((1<<8|1),(LPWSADATA&WSAData),其中(1<<8|1)表示我们用的是WinSocket1.1版本,WSData用来存储系统传回的关于WinSocket的资料。

目前的实例使用2.2版本:if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)

  2)建立Socket

  初始化WinSock的动态连接库后,需要在服务器端建立一个监听的Socket,为此可以调用Socket()函数用来建立这个监听的Socket,并定义此Socket所使用的通信协议。此函数调用成功返回Socket对象,失败则返回INVALID_SOCKET(调用WSAGetLastError()可得知原因,所有WinSocket 的函数都可以使用这个函数来获取失败的原因)

SOCKET PASCAL FAR socket( int af, int type, int protocol )

参数: af:目前只提供 PF_INET(AF_INET)

typeSocket 的类型 (SOCK_STREAMSOCK_DGRAM)

protocol:通讯协定(如果使用者不指定则设为0)

如果要建立的是遵从TCP/IP协议的socket,第二个参数type应为SOCK_STREAM,如为UDP(数据报)的socket,应为SOCK_DGRAM

 

以下在做服务器程序的时候可以使用:

  3)绑定端口

  接下来要为服务器端定义的这个监听的Socket指定一个地址及端口(Port),这样客户端才知道待会要连接哪一个地址的哪个端口,为此我们要调用bind()函数,该函数调用成功返回0,否则返回SOCKET_ERROR

int PASCAL FAR bind( SOCKET s, const struct sockaddr FAR *name,int namelen );

数: sSocket对象名;

nameSocket的地址值,这个地址必须是执行这个程式所在机器的IP地址;

namelenname的长度;

  如果使用者不在意地址或端口的值,那么可以设定地址为INADDR_ANY,及Port0Windows Sockets 会自动将其设定适当之地址及Port (1024 5000之间的值)。此后可以调用getsockname()函数来获知其被设定的值。

 

  4)监听

  当服务器端的Socket对象绑定完成之后,服务器端必须建立一个监听的队列来接收客户端的连接请求。listen()函数使服务器端的Socket 进入监听状态,并设定可以建立的最大连接数(目前最大值限制为 5, 最小值为1)。该函数调用成功返回0,否则返回SOCKET_ERROR

int PASCAL FAR listen( SOCKET s, int backlog );

数: s:需要建立监听的Socket

backlog:最大连接个数;

 

  服务器端的Socket调用完listen()后,如果此时客户端调用connect()函数提出连接申请的话,Server 端必须再调用accept() 函数,这样服务器端和客户端才算正式完成通信程序的连接动作。为了知道什么时候客户端提出连接要求,从而服务器端的Socket在恰当的时候调用accept()函数完成连接的建立,我们就要使用WSAAsyncSelect()函数,让系统主动来通知我们有客户端提出连接请求了。该函数调用成功返回0,否则返回SOCKET_ERROR

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值