Windows操作系统环境下的套接字编程主要步骤如下:

  1. 初始化WinSock的DLL动态链接库,使用WSAStartup函数。
  2. 创建套接字,进行地址、端口、协议等的绑定,涉及socket、bind函数。
  3. 进行套接字的监听、连接,涉及listen、accept、connect等函数。
  4. 进行数据包的收发通信,涉及send、recv函数。
  5. 关闭相应的套接字,涉及closesocket、shutdown函数。
  6. 注销和释放相应的动态链接库资源,使用WSAtarstup函数。

具体案例可参考如下:

  1. 案例一:查询主机名对应的IP地址
  2. 案例二:UDP实现的点对点聊天
  3. 案例三:UDP实现的点对点聊天(多线程)
  4. 案例四:TCP实现的点对点聊天
  5. 案例五:TCP实现的点对点聊天(多线程)

Windows 下的 socket 程序和 Linux 思路相同,但细节有所差别:

  1. Windows 下的 socket 程序依赖 Winsock.dll 或 ws2_32.dll,必须提前加载。
  2. Linux 使用"文件描述符"的概念,而 Windows 使用"文件句柄"的概念;Linux 不区分 socket 文件和普通文件,而 Windows 区分;Linux下socket()函数的返回值为 int类型,而 Windows 下为 SOCKET 类型,也就是句柄。
  3. Linux 下使用 read() / write() 函数读写,而 Windows 下使用 recv() / send() 函数发送和接收。
  4. 关闭 socket 时,Linux 使用 close() 函数,而 Windows 使用 closesocket() 函数。

接收发送函数区别:

read(sockfd, buff, buff_size);
write(sockfd, buff, buff_size);
recv(sockfd, buff, buff_size,MSG_WAITALL); //阻塞模式接收
send(scokfd, buff, buff_size,MSG_WAITALL); //阻塞模式发送
recv(sockfd, buff, buff_size,MSG_DONTWAIT); //非阻塞模式接收
send(scokfd, buff, buff_size,MSG_DONTWAIT); //非阻塞模式发送
recv(sockfd, buff, buff_size,0);
send(scokfd, buff, buff_size,0);
  1. 尽量使用recv(,MSG_WAITALL),read必须配合while使用,否则数据量大(240*384)时数据读不完。
  2. 编程时写入的数据必须尽快读出,否则后面的数据将无法继续写入。
  3. 最佳搭配如下:
         nbytes = recv(sockfd, buff, buff_size,MSG_WAITALL);nbytes = send(scokfd, buff, buff_size,MSG_WAITALL);

send(),recv(),sendto()和recvfrom()注意要点:

  • send(),recv()用于TCP,sendto()及recvfrom()用于UDP。但是send(),recv()也可以用于UDP,sendto()及recvfrom()也可以用于TCP。
  • sendto函数 和 recvfrom 函数一般用于UDP协议中,但是如果在 TCP 中 connect 函数调用后也可以用。
  • sendto() 和recvfrom() --------> 利用数据报文方式进行数据传输。

WindowsSockets套接字编程学习-C语言相关推荐

  1. TCP套接字编程(C语言)

    本篇主要内容介绍: 介绍TCP套接字基本概念 介绍TCP套接字编程流程 基本TCP套接字函数介绍 1.TCP套接字基本概念(非官方解释,个人总结) 套接字是一种网络API,提供一种进程间的通信方法,使 ...

  2. Python 套接字编程

    Python 套接字编程学习历程 1.什么是socket? Socket中文译作:套接字,socket是来建立'通信'的基础,建立连接,传输数据'通信端点'. 每一个套接字就是一组接口与端口的组合,用 ...

  3. 《UNIX网络编程 卷1:套接字联网API》学习笔记——基本TCP套接字编程

    UNIX网络编程--基本TCP套接字编程 socket 函数 connect 函数 bind 函数 listen 函数 accept 函数 fork 和 exec 函数 并发服务器 close 函数 ...

  4. UNIX环境编程(c语言)--套接字--基本TCP套接字编程

    目录 准备知识 字节序 字节序转换函数 字节操纵函数 地址转换函数 地址结构 基本TCP套接字编程 概要 socket函数 bind函数 listen函数 accept函数 connect函数 通信函 ...

  5. 《Windows网络编程案例教程》-董相志 学习记录 阻塞/非阻塞套接字编程

    <Windows网络编程案例教程>-董相志 学习记录 阻塞/非阻塞套接字编程 2.3 阻塞/非阻塞套接字编程 阻塞套接字编程通信流程图 2.3.1 阻塞套接字客户机编程 1.启动并初始化W ...

  6. 网络编程学习笔记-套接字编程-socket

    本文为了说明例子,用中文作为变量写在了程序里面,一般编程最好不要那么写 前置概念详见 本文目录 概念 基本TCP套接字编程 通信循环 半链接池 链接循环 udp协议 基于TCP协议实现远程执行客户端请 ...

  7. UDP套接字编程——Python语言描述

    首先,回顾一下.在我们使用Socket编程之前的一些网络的概念. IP:它是用来标识处于Internet之中的端系统的. MAC:它是用于在同一局域网中标识不同的计算机的. 端口号:它是用来标识同一台 ...

  8. IPv6套接字编程介绍

    IPv6套接字编程 1.概述 由于互联网用户的日益增加,网络需求日益扩大,IPv4地址也日益紧张.人们为了解决地址日趋耗尽的问题,采用了CIDR.NAT等技术来延缓地址耗尽的速度,但这并不能从根本上解 ...

  9. Linux 套接字编程中的 5 个隐患

    Linux 套接字编程中的 5 个隐患 (2011-05-03 17:50) 分类: Socket编程 在 4.2 BSD UNIX® 操作系统中首次引入,Sockets API 现在是任何操作系统的 ...

最新文章

  1. 暑期集训2:ACM基础算法 例2:POJ-2456
  2. 速度超快!字节跳动开源序列推理引擎LightSeq
  3. 高科技领域零的突破永不嫌多 --- 我看嫦娥四号成功登陆月球背面
  4. linux怎么获取当前路径,linux 下获取当前工作路径的实例
  5. 百度的云智一体,让视频变得“硬核性感”
  6. 外观模式(Facade)
  7. docker php nginx,使用docker快速搭建nginx+php环境
  8. python单行注释用什么符号_Python多行注释和单行注释用法说明
  9. 插画类引导页设计灵感|友好结合,总能带给人惊喜~
  10. 计算机二级office函数日期,Excel函数-日期和文本函数-计算机二级Office
  11. 蓝桥集训之BFS、DFS和链式前向星
  12. php反序列化漏洞实验,PHP反序列化漏洞简介及相关技巧小结
  13. Bettertouchtool for Mac(鼠标增强软件)
  14. 机器视觉在工业检测中的应用
  15. 创建shap文件的属性字段类型区别_shapefile数据文件组成
  16. 可视化模板:销售\采购\财务收支等模板分享
  17. 安卓 11 非网络以太网切换动态和静态IP无法连接问题
  18. 电气比例阀原理(液压气动控制基础系列)
  19. GNSS定位精度指标计算
  20. Greenplum-Spark Connector 介绍

热门文章

  1. gRPC应用demo--复杂proto文件编写
  2. setsockopt函数用法
  3. noip2012提高组模拟题樱桃庄园
  4. 用户需求分析:背后隐藏的门槛---TOMsInsight 2014.10.12
  5. 微机原理笔记——数据传送指令
  6. 财务自由之路 笔记 第十二章-财务保障、财务安全
  7. API自动化工具之案例解析
  8. 运维| 电脑太久没用,导致开机太慢的解决方法
  9. 深入理解深度学习——BERT派生模型:XLM(Cross-lingual Language Model)
  10. 2021牛客暑期多校训练营2-I(Penguins)