Windows下套接字

一、套接字
    windows套接字Socket是进程通信的一种方式,可以实现在不同主机的相关进程之间交换数据。在TCP/IP网络应用中,通信的两个进程的主要模式是客户/服务器(C/S)模式,即客户向服务器发出请求,服务器接受到请求后,提供相应的服务。

二、套接字函数

1. 创建套接字 socket

2. 绑定本地地址 bind

3. 监听连接  listen

4. 建立套接字连接 connect 与 accept
    5. 数据传输 send 与 recv

6. 关闭套接字 closesocket

三、套接字工作模式 阻塞模式和非阻塞模式

在阻塞模式下,在I/O操作完成前,执行的操作函数一直等待而不立即返回,该函数所在的线程会阻塞在这里。举例说明,当调用recv函数,系统首先检查是否有数据准备好数据,如果数据没有准备好,那么系统就处于等待状态。当数据准备好后,将数据从系统缓冲区COPY到用户空间,然后该函数返回。使用阻塞模式的套接字开发简单,不多介绍。

在非阻塞模式下,执行的操作函数会立即返回,而不管I/O是否完成,该函数所在线程会继续运行。该操作函数返回错误代码(WSAEWOULDBLOCK)。举例,一个非阻塞模式套接字多次调用recv函数,前几次调用recv函数时,系统数据还没有准备好,因此该函数返回WSAEWOULDBLOCK错误代码,最后一次调用recv()函数时,数据已经准备好,被复制到应用程序的缓冲区中,recv()函数返回成功。

     套接字设置为非阻塞模式后,在调用Windows Sockets API函数时,调用函数会立即返回。大多数情况下,这些函数调用都会调用失败,并返回WSAEWOULDBLOCK错误代码。说明请求的操作在调用期间内没有时间完成。通常,应用程序需要重复调用该函数,直到获得成功返回代码。 

若循环去调用recv函数,会造成系统发给应用程序的消息丢失,而是应该采用WSAEventSelect和WSAAsynSelect 模型,当有FD_READ时,数据已经是在系统的缓冲区,再调用recv。

  

四、代码示例
    1、设置非阻塞模式       

      

2. 非阻塞模式 套接字连接 connect
       

3. 非阻塞模式 接受数据 recv
      

4. 非阻塞模式 发送数据 send

    

  若需要完整代码,请联系QQ 295984486

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值