Network Programming for Windows读书笔记2

    connect函数和WSAConnect函数

    最后一步就是连接.这是通过调用connect 函数或WSAConnect函数来完成的.我们先来看看该函数的Winsock1版本,其定义如下:

    int connect(

            SOCKET s,

             const struct sockaddr FAR* name,

            int namelen

);

    该函数的参数是相当清楚的:s是即将在其上面建立连接的那个有效TCP套接字;name是针对TCP(说明连接的服务器)的套接字地址结构(SOCKADDR_IN);namelen则是名字参数的长度.

    Winsock2版本中,它的定义是这样的:

    int WSAConnect(

           SOCKET s,

           const struct sockaddr FAR* name,

           int namelen,

           LPWSABUF   lpCallerData,

           LPWSABUF   lpCalleeData,

           LPQOS   lpSQOS,

           LPQOS   lpGQOS

     );

    前三个参数和connect API函数的参数是完全一样的.另外两个参数----lpCallerData和lpCalleeData,是字串缓冲区,用于收发请求连接时的数据.lpCallerData参数是指向缓冲区的指针,缓冲区内包括客户机向服务器发出的请求连接的数据.lpCalleeData参数则指向另一个缓冲区,区内包括服务器向客户机返回的建立连接时的数据.这两个参数都是WSABUF结构,因此,诺是lpCallerData,len字段应该设为buf字段中准备传输的数据长度.诺是lpCalleeData,len字段则代表buf中的缓冲区长度,设为从服务器返回的数据长度.最后两个参数-------lpSQOS和lpGQOS,表示QOS结构,该结构对即将建立的连接上收发数据所需要的带宽进行了定义.lpQOS参数用于指定套接字s需要的服务质量,而lpGQOs则用于指定套接字组所需要的服务质量.目前,尚未提供对套接字组的支持.诺lpQOS是空值,则表明没有某应用专用的QOS.

    如果你想连接的计算机没有监听指定端口这一进程,connect调用就会失败,并发生错误WSAECONNREFUSED.另一个错误可能是WSAETIMEDOUT, 这种情况一般发生在试图连接的计算机不能用时(亦可能因为到主机之间的路由上出现硬件故障或主机目前不在网上).

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值