Winsock网络编程

Winsock网络编程接口 Winsock 是一套开放的、支持多种协议的 Windows 下网络编程接口,是 Windows 网络编程上的标准接口。应用程序通过调用 Winsock 的 API 实现相互之间的通信,而 Winsock利用下层的网络通信协议功能和操作系统调用实现实际的通信工作。        套接字(Sockets)是通信端点的一种抽象,是支持 TCP/IP  协议网络通信的基本操作单元,它提供了一种发送和接 阅读详情

  先复习一下基础。编写winsock程序,需要#include<winsock2.h>这个头文件,这是#pragma comment(lib,"WS2_32.lib")

socket 描述符(套接字句柄)
“在 UNIX 系统中,任何东西都是一个文件。”这句话传达了这样一个理念:在 UNIX 系统中,任何 I/O 操作,都是通过读或写一个文件描述符(File Descriptor,FD)来实现的。
文件描述符只是一个简单的整形数值,代表一个被打开的文件。这里的“文件”并非狭义上的磁盘文件,而是指广义上的文件,它可以代表一个网络上的连接、一个先进先出的队列、一个终端显示屏等。
既然在 UNIX 系统中任何东西都可以抽象为一个文件,通过 Internet 和另外一台机器进行通讯这一典型的 I/O 机制也是基于文件描述符来定义实现的。这个文件描述符即套接字内核对象:int sockfd。在早期的 UNIX/Linux 系统中,可直接调用 read() 和 write() 像操作文件那样对套接字执行类似的读写操作,尽管调用 recv() 和 send() 显得更为专业。
在 Windoze 系统中,内核对象往往交由一个句柄与外部交互,如文件句柄。在很多 WinSock 场合我们习惯使用“套接字句柄”这一称呼:typedef u_int SOCKET。实际上,WinSock 中对于套接字的操作,很大程度上也沿袭了文件操作的规范。例如,在 Winsock 1 规程中,应用程序可以针对套接字句柄调用 ReadFile() 和 WriteFile(),同时指定重叠结构以利用重叠 I/O 模型,到 Winsock 2 中才正式替换为 WSARecv() 和 WSASend(),以专用于套接字操作。
Windows Sockets规范
Sockets 本来是 UNIX 操作系统下流行的一套网络编程接口(API),它是 1983 年在 Berkeley(加州大学伯克利分校)4.2 BSD 操作系统中被首先引入的,因此也被称作“Berkeley Socket API”。
Windows Sockets 是在 Windows 环境下使用的一套网络编程规范,常常简称为 WinSock。在 Winsock 规范中,API 函数集被分为三类:与 BSD Socket 相兼容的基本函数,网络数据信息检索函数和 Windows 专用扩展函数。
Windows Socket 1 规范的核心内容是符合 Berkeley Socket 风格的库函数,例如可以编写基于 select 模型的的跨平台socket 通信库。鉴于后来各大平台都移植支持了 Berkeley Socket 的这一基本 I/O 模型, select 模型可以很好地实现跨平台,但对具体操作系统平台而言并非性能最佳。为了使程序员能充分利用 Windows 消息驱动机制,MS 又定义开发了一组针对 Windows 的扩展库函数,这就是 Windows Socket 2 规范。
Windows Socket 2 规范(Winsock 2.x)提供了基于 Windows 消息机制的 WSAAsyncSelcet 异步 I/O 网络事件通知模型。此外,WinSock 2.x 还提供了基于事件通知的异步 I/O 网络事件通知的 WSAEventSelcet 模型和高效的重叠 I/O 模型。其他操作系统平台也各自实现了更加高效的网络 I/O 管理模型,如 Windoze 的 IOCP 模型、Linux 的 epoll 模型,这些模型基于系统特性和内核机制最大限度地平衡了 I/O 效能(大规模、高并发)。
目前常用的 Winsock 有两个版本:一个是 16 位的 Winsock 1.1,由动态链接库 WINSOCK.DLL 提供支持;另一个是 32 位的 Winsock 2.2,由动态链接库 WSOCK32.DLL 提供支持。
从 Win98/NT4 开始,Windows 引入 WinSock 2,而 WinSock 1 成为 WinSock 2 的功能子集。在 32 位系统下,16 位的 WINSOCK.DLL(Windows Socket 16-bit DLL)为 Non-resident。
ws2_32.dll 和 mswsock.dll 是 WinSock 2 真正的实现者,使用 Dependency Walker 可以看到 wsock32.dll 和 mswsock.dll 都依赖 ws2_32.dll。wsock32.dll 只是映射了 ws2_32.Dll 和 mswsock.dll 这两个函数集的部分内容,并无具体实现。
mswsock.dll 提供了微软特有的 WSA 扩展,包括 AcceptEx/GetAcceptExSockaddrs、ConnectEx/DisconnectEx、TransmitPackets/TransmitFile、WSARecvMsg。其中仅有 AcceptEx/GetAcceptExSockaddrs 和 TransmitFile 这三个函数真正从 mswsock.dll 导出。
如果要求编写符合 Berkeley Socket API 标准的程序,则只需要加载 wsock32.dll 使用 WinSock 1.x 规范(BSD Socket API for Windows)即可。如果要结合 Windows 平台特性编写 WinSock 2.x 的程序,则可加载 ws2_32.dll 和 mswsock.dll 调用 WSA 系列(扩展)函数。加载 WinSock 库是通过 WSAStartup() 来指定的。

VB6 Winsock网络编程项目实战 本文还有配套的精品资源,点击获取 简介:VB6是一个经典的Windows应用程序开发环境,Winsock是用于实现TCP/IP通信的网络接口。本文档展示了如何在VB6中使用Winsock控件创建基础的网络聊天应用和文件信息交换程序。通过server和client示例文件,读者可以学习到Winsock控件的关键使用方法、网络连接建立、数据传输、事件驱动编程、以及多线程处理等重... 阅读详情

相关推荐

Windows网络编程核心组件:Winsock及其安装指南

在当今的网络通信时代,应用程序通过网络进行数据交换已经是再平常不过的场景。为了实现这一目标,开发者需要了解并掌握一系列网络编程接口和协议。在Windows平台中,Winsock(Windows Sockets)是一套网络编程接口,它允许程序员为Windows平台创建TCP/IP网络应用程序。Winsock为开发者提供了一套标准的应用程序编程接口(API),用于在客户端和服务器之间建立和管理连接,发送和接收数据。它支持多种传输协议,包括但不限于TCP和UDP。

weixin_34392511的博客 957

Windows的网络编程-之一-WinSock基础

对于多字节数据在内存中有两种存储方式: Little-endian:低字节在前,高字节在后; Big-endian:高字节在前,低字节在后 网络协议在处理多字节整数时,采用的是高端字节序,在编程时一定要考虑主机字节顺序与网络字节顺序的相互转换。 1      WinSock基本 1.1     加载/卸载WinSock库 如果装载Winsock1,那么必须include,同时建立与Ws

edisonlg的专栏 1065

水下探测小白必看:单波束vs多波束声呐,5分钟搞懂核心区别

本文为水下探测新手清晰解析了单波束与多波束声呐的核心区别。单波束声呐如同精准的“手电筒”,进行逐点扫描,适用于定点测深和目标探测;而多波束声呐则像“聚光灯”,能一次性覆盖一个扇区,高效获取海底地形三维信息,是海底测绘和水下三维建模的理想选择。文章通过生动的比喻和对比表格,帮助读者快速理解两者原理、效率差异及适用场景。

linux6sysadmin的博客 1044

WinSock编程小结

一. 服务器端 1.加载WInSock库 因为WinSock服务是通过动态链接库WinSock DLL实现的,所以调用WinSock函数前,需要加载WinSock库启动服务。 int WSAStart( WORD wVersion, LPWSADATA lpWSAData); wVersion 指定加载的WinSock版本号,一般使用MAKEWORD(X,Y); X指副版本号,Y指主版

chenxiao88957478的博客 487

极验第四代滑块验证码破解(三):滑块轨迹构造

极验第四代滑块验证码破解(三):滑块轨迹构造声明 声明 原创文章,请勿转载! 本文内容仅限于安全研究,不公开具体源码。维护网络安全,人人有责。 本文关联文章超链接:

帯泪的鱼的博客 8623

【信道编码/Channel Coding】线性分组码

这是本专栏信道编码/Channel Coding的第二站,想对信道编码有一个系统性的认识可以看本专栏的信道编码的整体框架一文。而在本篇文章中,将介绍线性分组码的基本原理。

Tomatomatodo的博客 9243

[笔记] Microsoft Windows网络编程《一》WinSock简介

本章专门讲解编写成功的 Winsock 用程序的基木方法。Winsock 是一种标准 API(Application Programming Interface,应用程序编程接口),要用于网络中的数据通信,它允许两个或者多个应开程序(或进程)在同一台机器上或通过网络相互通信。Winsock 是一种网络编程接口,而不是协议。使用 Winsock 编程接口,应用程序可通过通网络协议如。

二次元怪兽的博客 3472

手把手教你用VS Code + Codex在WSL中高效编程(避坑指南)

本文提供了一份详细的避坑指南,教你如何在WSL环境中高效配置和使用VS Code与OpenAI Codex。文章核心在于解决WSL内Codex扩展的OAuth登录失败问题,推荐将扩展安装在Windows本地,并通过UNC路径直接访问WSL文件系统,从而实现AI辅助编程与Linux开发环境的无缝结合,提升编码效率。

weixin_28677451的博客 1062

Windows下的网络编程Winsock

相比于基础,网络编程就要复杂一些,但其实也有固定格式,记住即可。

森明帮大于黑虎帮的博客 6909

“挑战杯”大赛“揭榜挂帅”赛道-baseline解析

在这个脚本中,txt文件的保存路径为'yolov7/datasets/Fatigue_driving_detection/txt_labels/',而xml文件的路径为'./label_xml/'。标注图片后的产物是会给每一个图片对应生成一个xml格式的文件,但是如果要用yolo框架去训练模型,输入的数据必须是txt格式,因此这里有一步转换格式的过程。注意看:obs这里有三个文件夹,第一个是关键帧的文件夹A,第二个是标注时输出的位置为文件夹B,第三个是智能标注后和手动标注的合集文件夹C。

m0_62899814的博客 2321

OpenCV图像拼接实战:用SIFT+透视变换打造无缝全景图(附完整代码)

本文详细介绍了使用OpenCV和SIFT算法实现图像拼接的全过程,包括特征匹配、透视变换和高级融合技术。通过实战代码演示,帮助开发者掌握无缝全景图生成的核心技术,适用于旅行摄影、无人机航拍等多种场景。

eee77的博客 997

WinSock 编程:Windows 网络编程的基础

WinSock(Windows Sockets)是 Microsoft Windows 操作系统中用于网络编程的一套 API(应用程序编程接口)。它提供了一组函数库,允许程序员在 Windows 平台上开发网络应用程序,实现网络通信和数据传输。WinSock 抽象了底层网络协议和硬件细节,为程序员提供了一套统一的接口,使他们能够更容易地实现网络功能。WinSock 广泛应用于各种 Windows 网络应用程序中,包括网页浏览器、即时通讯软件、网络游戏等。

JAZJD的博客 2452

【AN7581】AN7581 SDK编译环境搭建操作说明

安装编译需要的工具包。

wgl307293845的博客 338

关于网络编程方面VB的WINSOCK编程

VB网络编程--WinSock控件及WinSockAPI一,WinSock简介Socket(套接字)最初是由加利福尼亚大学Berkeley(伯克利)分校为UNIX妈作系统开发的网络通信接口,随着UNIX的广泛使 用,Socket成为当前最流行的网络通信应用程序接口之一。20世纪90年代初,由Sun Microsystems,JSB,FTP software,Microdyne和Microsoft等

wjb9921的专栏 5167

企业微信开发007_域名主体校验未通过,需配置备案主体与当前企业主体相同或有关联关系的域名_企业内部自建应用开发_配置可信域名_回调URL_可信IP---企业微信开发009

因为我这个企业微信是,已经注册了服务商了,所以我又注册了一个不是服务商的测试企业,没有实名认证的,去试了试。而且,网络上找的教程,都是不够详细的,还是会碰到各种各样的问题,记录下来,为后来者提供便利。首先我用natapp.cn 申请了一个免费的域名,然后去,一个,企业微信上去配置,注意。我这个域名,的主体,可能是域名服务商,比如阿里域名 等等的 不是一般的企业域名。我这个企业微信,是开通了服务商的,企业微信,右上角有服务商管理后台的。到时候,直接用,他们自己企业注册的域名,已经备案的再去尝试,

添柴程序猿的专栏 1692

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

网络编程 什么是Winsock

什么是Winsock     Winsock是Windows下的网络编程接口,它是由Unix下的BSD Socket发展而来,是一个与网络协议无关的编程接口。 构建编程环境     Winsock在常见的Windows平台上有两个主要的版本,即Winsock1和Winsock2。编写与Winsock1兼容的程序你需要引用头文件WINSOCK.H,如果编写使用Winsock2的程序

864

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

WinSock网络编程基础

WinSock网络编程基础构建WinSock应用程序框架Socket函数socket()函数bind()函数listen()函数accept()函数recv()函数send()函数 Winsock是Windows环境下的网络编程接口,它最初基于UNIX环境下的BSD Socket,是一个与网络协议无关的编程接口。在Visual Studio中可以使用WinSock API开发网络应用程序,实现计算机之间的通信。 构建WinSock应用程序框架 在使用WinSock 2.2实现网络通信功能时,需要引用头文件w

SebastianStan的博客 3592

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

网络编程系列之Winsock

1、WinSock 介绍 Windows Sockets是Microsoft Windows的网络程序设计接口,它是从Berkeley Sockets扩展而来的,基于4.3BSD的BSD Socket API制定,以动态链接库的形式提供给我们使用。 1991年Winsock 1.1,16位,主要用在Windows 95中 1997年Winsock 2.2 版,32位,主要用在W...

dileyi4094的博客 251

Winsock网络编程快速入门

一、基本知识   1、Winsock,一种标准API,一种网络编程接口,用于两个或多个应用程序(或进程)之间通过网络进行数据通信。具有两个版本: Winsock 1: Windows CE平台支持。 头文件:WinSock.h 库:wsock32.lib   Winsock 2: 部分平台如Windows CE貌似不支持。通过前缀WSA可以区别于Winsock 1版本。个别函数如

zhao_yin的记事本 4308

C++网络编程--简单的WinSock代码

//注意要引用WinSock2的lib文件,否则编译不会通过 #include <WINSOCK2.H> #include <stdio.h> int main(int argc,char** argv) { WSADATA wsaData; char HostName[256]; hostent* HostEnt; protoent* ProtoE...

weixin_30872789的博客 417

Cpp网络编程Winsock API

作者:blue时间:2025.3.31。

blue的博客 1272

基于VC的WinSock网络编程实用宝典

Windows Sockets是一套开放的、支持多种协议的Windows下的网络编程接口。现在的Winsock已经基本上实现了与协议无关,你可以使用Winsock来调用多种协议的功能,但较常使用的是TCP/IP协议。Windows Sockets 是从 Berkeley Sockets 扩展而来的,其在继承 Berkeley Sockets 的基础上,又进行了新的扩充。在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Server model)。2、通信完全是异步的…..

m0_59092234的博客 378

网络编程之Winsock2

1、在Windows操作系统环境下,使用Windows Sockets API进行网络程序开发时,需要调用Windows操作系统的Windows Sockets动态库 包含Sockets头文件 导入相应库文件;下面是相应的导入 具体用代码实现是这样的: 这是用1.1版本 #include <WINSOCK.h> #pragma comment(lib, "...

dileyi4094的博客 728
上一篇: Windows库连接之动态链接库
下一篇: MFC获取指针的方法。收藏一下,挺全的
robert_chao
博客等级 码龄15年 265粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值