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. PCLPCL/OpenNI tutorial 2: Cloud processing (basic)
  2. https安全传输揭秘
  3. 【网址收藏】podman安装及使用简单介绍
  4. 计算机批量管理,如何将计算机电脑批量加入域
  5. 【算法训练】DAY1:整数反转
  6. java表达式的类型_java – 此表达式的目标类型必须是功能界面
  7. 【报告分享】华为:汽车大势所趋,赋能者到引领者.pdf(附下载链接)
  8. 蓝桥杯2019年第十届C/C++省赛B组第八题-等差数列
  9. python接口自动化测试二十六:使用pymysql模块链接数据库
  10. mac电脑循环次数多少算新_在Mac上处理不同事务,这些软件必不可少,个个精品...
  11. 女生节送什么礼物给女友,2022女生节送礼合集
  12. 【优化算法】简述灰狼优化算法(GWO)原理
  13. 讲讲我是如何装一个性价比高的EYPC 9654双槽服务器的
  14. Win10以太网网络电缆被拔出,没有WLAN选项
  15. iStylePDF在线阅读编辑控件在多浏览器(IE,firefox,chrome,opera等)中的使用
  16. Mac下好用的日记、电子书阅读器、RSS订阅软件​
  17. 自相关、互相关函数学习笔记
  18. 如何创建Windows网络计划任务
  19. 计算机 管理 mmc 注册表,在win7电脑的组策略编辑窗口中MMC无法创建管理单元怎么办?...
  20. 了解CNN这一篇就够了:卷积神经网络技术及发展

热门文章

  1. java类到proto定义转换工具
  2. PGRelief使用指南2014(windows版)
  3. linux时间子系统(九)
  4. WSL2下的usb串口设备使用
  5. 不妙,2023年浙大mpa的复试形势比想象的更严峻,又在突突突涨……
  6. 关于Blog搬家这件事
  7. 早到医院一分钟也许能救回一个生命!百度地图上线的新功能太暖了
  8. android studio+Droid4x(海马玩)
  9. 2007-2022 年上市银行绿色信贷余额、绿色信贷比率、资本充足率等关键指标
  10. 使用PostMessage解决跨窗体消息传递