一、套接字
    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. Xshell连接Ubuntu报错 “服务器发送了一个意外的数据包”
  2. 面对大规模 K8s 集群,如何先于用户发现问题?
  3. 网管员心声:Windows服务有“备”无患
  4. 基于评论文本的深度推荐系统总结
  5. 【C#】wpf自定义calendar日期选择控件的样式
  6. AndroidStudio提高编译速度的建议
  7. Cannot proceed with delivery: an existing transporter instance is currently uploading this package
  8. HttpPrinter共享打印机 网络打印
  9. Ubuntu无法联网解决方案
  10. android 色值(全)
  11. 人民日报申论范文:如何写“担当”“责任”
  12. 公司的苹果开发者账号续费问题
  13. w10计算机右键管理,Win10右键菜单怎么管理
  14. java判断闰年中闰月_编程序:计算某年某月有多少天(区分闰年和闰月)?怎么编?...
  15. 带色彩恢复的多尺度视网膜增强算法(MSRCR)的原理、实现及应用
  16. adobe xd_如何在Adobe XD中创建Finance App UI设计
  17. git.exe 启动 慢_安化县利勃海尔挖掘机维修全车动作慢无力
  18. RISCV学习笔记5.3--ubuntu18.04芯片设计软件(vcs、verdi)的简单使用
  19. 模型训练过程中产生NAN的原因分析
  20. 面对中小型机房动力环境该如何实现监控?

热门文章

  1. Flask, Access-Control-Allow-Origin 跨域请求的解决方法
  2. 突破16%“生死线”!央视点名鸿蒙,华为再次“改口”
  3. 成都拓嘉启远:拼多多上货指南
  4. 物理气相沉积半导体设备 PVD DSP/ARM+FPGA控制器设计
  5. 傻子都能看懂的——详解AdaBoost原理
  6. 计算机图形学课设题目
  7. U盘启动安装linux服务器(附带ULtraISO工具下载地址和注册码)
  8. SEO学习(SEO是什么,SEO的工作原理,SEO如何优化)
  9. js字符串大小写转换
  10. python在平面设计中的作用_平面构成在平面设计中的作用