一、套接字
    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

Windows下套接字相关推荐

  1. 【转载】Linux下套接字学习

    感觉这个系列还不错,学习一下. 先看的是第三篇: http://blog.csdn.net/gatieme/article/details/46334337 < Linux下套接字详解(三)-- ...

  2. Windows Socket套接字(四)-Windows套接字错误代码

    WSAGetLastError函数 int WSAGetLastError(void); 返回值表示该线程的最后一个Windows Sockets操作失败的错误代码. 在Winsock应用程序中,使用 ...

  3. Linux下套接字详解(二)----套接字Socket

    在前面我们讲了TCP/IP.TCP和UDP的一些基本知识,但是协议只有一套,而我们系统多个TCP连接或多个应用程序进程必须通过同一个 TCP协议端口传输数据.为了区别不同的应用程序进程和连接,许多计算 ...

  4. 02、Windows Phone 套接字(Socket)实战之服务器端设计

    这里主要写 PC 服务器端的逻辑,UI 使用的是 WPF,因为 WPF 比普通的 WinForm 的流式布局 更容易控制,而且比 WinForm 美观一些,显示截图: 一.页面 UI MainWind ...

  5. Linux下套接字详解(四)----简单的TCP套接字应用(迭代型)

    前面我们已经将了TCP/UDP的基本知识,还说了并发服务器与迭代服务器的区别,我们大致了解大多数TCP服务器是并发的,大多数UDP服务器是迭代的 ,即我们在进行数据传送的时候,往往使用服务器与客户但之 ...

  6. Linux下套接字详解(七)----线程池accept处理高并发connect

    前言 服务器在调用listen和accept后,就会阻塞在accept函数上,accpet函数返回后循环调用accept函数等待客户的TCP连接. 我们知道服务器段listen套接字能处理的连接数与监 ...

  7. Linux下套接字详解(六)----基于pthread的多线程的TCP套接字(阻塞/同步/并发)

    上节我们实现了一个简单的多进程的服务器程序,这节,我们服务器的框架不做修改,只是将其修改为一个多线程的服务器程序. 直接上代码 server #include <stdio.h> #inc ...

  8. Linux下套接字详解(五)----基于fork多进程的TCP套接字(阻塞/同步/并发)

    简介 一个简单的改进方案是在服务器端使用多线程(或多进程).多线程(或多进程)的目的是让每个连接都拥有独立的线程(或进程),这样任何一个连接的阻塞都不会影响其他的连接.具体使用多进程还是多线程,并没有 ...

  9. Windows 网络通信套接字技术

    文章目录 一.TCP/IP介绍 1.TCP/IP体系结构 2.TCP/IP特点 3.TCP/IP协议与WinSock网络编程接口的关系 二.套接字原理 1.客户机/服务器模式 服务器端: 客户端: 2 ...

最新文章

  1. Java_apply_in_automatic_system
  2. 软件工程学习笔记——软件工程基本原理
  3. 5.IA-32寄存器
  4. 脚本配置文件(通过一个案例解释下什么叫脚本配置文件)
  5. 信息收集——Web目录扫描
  6. ie下滚动条样式设置
  7. win7系统字体模糊发虚不清晰的解决方法
  8. jquery 取值 数值_jQuery – 使用正则表达式获取数据值
  9. html5白话解释,HTML5这个词到底是什么意思?
  10. java判断字符串是否包含某个字符串_Bash技巧:使用[[命令的 =~ 操作符判断字符串的包含关系...
  11. Kotlin基础学习-入门篇
  12. 基于stm32单片机的物联网WiFi智能快递柜设计
  13. android 开发笔记 (黎活明)
  14. 对应于正态分布的拉丁超立方抽样——Python版
  15. Navicat Premium 12.0.22安装与激活
  16. ReSharper配置及用法
  17. 后摩尔时代来临,语音IC封装技术一触即发
  18. P1386 座位安排
  19. java酷炫代码_Java8 中有趣酷炫的小技巧
  20. java代码大全及详解(Java 常用代码汇总)

热门文章

  1. 用python计算一个月地铁费
  2. K8S网络-02-安装 weave:v2.8.1
  3. 微信小程序获取本机手机号码登录
  4. NAT反向代理技术的实现(外网访问内网)
  5. CSS3日食示意图动画
  6. Uniswap v3 详解(四):交易手续费
  7. 编程之美 1.6 买饮料问题
  8. Android 上传图片到服务器(多文件上传)
  9. ARM_UNWIND_BACKTRACE (2)
  10. 机器学习 の04 梯度提升决策树GBDT