运行时: 编写套接字程序

windows上基于消息的异步套接字及其网络聊天室编写 一、 阅读详情
套接字是加利福尼亚大学 Berkeley 的研究人员于二十世纪八十年代开发的一种编程接口。套接字表示一种完整的机制,它能够在两个可能位于不同计算机上的端点之间建立网络连接。使用套接字 API 可以创建端点,并相互绑定。

Linux 和 Windows 套接字之间的互相操作天衣无缝,并且在编写两种系统上都可以编译的程序方面也不会面临太大的编程挑战。

套接字有许多形式:

  • 流
  • 数据报
  • 原始数据
  • 顺序信息包
  • 可靠传递的消息

 

为传送大量数据,虚拟线路是最佳选择,而套接字流就是一种虚拟线路。我们将在这一部分中注重流类型的套接字。

简单而言,客户机创建一个套接字,并尝试与已知的端点连接。服务器创建一个套接字,将其与端点名称(给它一个名称)绑定,然后等待连接。当客户机连接,而服务器接收连接时,数据通信就分别由这两个端点开始了。套接字支持双向的数据传送。

Windows 和 Linux 套接字

Windows 和 Linux 都支持 Berkeley 样式的套接字。Windows 还支持“Windows 套接字(Windows Sockets)”。Windows 上两个版本的套接字都需要下列初始化代码:


清单 1. WSAStartup
 
#ifdef _WIN32
    WSADATA wsadata;

    rc = WSAStartup(2, &wsadata);
    if(rc) {
        printf("WSAStartup FAILED: err=%d/n", GetLastError());
        return 1;
    }
#endif

这里, 2 是版本。可以使用任何非零数作为第一个参数。(第一个参数是一个无符号短型整数。)

与 vanilla Berkeley 套接字接口相比,我不太清楚 Windows 套接字接口是否必需。Windows 套接字好象支持其它的传送协议。但是,随着因特网及其 TCP/IP 协议被一致接受,我不知道“Windows 套接字”额外的复杂功能有什么价值。

有一个例外,我已经使用 Berkeley 样式的接口在本文中编写了这个程序。如果存在应该首选 WSA 接口而不是 Berkeley 样式的接口的根本原因,那是我还不了解。





回页首


套接字创建

使用 Linux 和 Windows 上支持的 socket() API 创建套接字:


清单 2. socket() API

 SOCKET socket(
    int af,       
    int type,     
    int protocol  
);

af 是地址系列,我使用 AF_INET 。 type 是 SOCK_STREAM 或 SOCK_DGRAM ,这里我只关注 SOCK_STREAM 。 protocol 是从 Linux 的 /etc/protocols 文件和 Windows 的 /winnt/system32/drivers/etc/protocol 文件中选择的一个数。我坚持用 0,它是这两个系统上的 IP 协议。

Windows 还有一个使用如下所述 API 的名为“Windows 套接字”的 Microsoft 专有接口:


清单 3. WSASocket 接口

SOCKET WSASocket(
    int af,
    int type,
    int protocol,
    LPWSAPROTOCOL_INFO lpProtocolInfo,
    GROUP g,
    DWORD dwFlags
);

(对于 Linux 和非 Windows 程序员,Microsoft DWORD 只是一个无符号长型整数。) 前三个参数与标准的 socket() 接口等同。三个新参数很有趣,它们为测试提供了丰富的背景。第一个额外参数是 lpProtocolInfo 指针。由 lpProtocolInfo 引用的结构是:


清单 4. WSAPROTOCOL_INFO 结构

typedef struct _WSAPROTOCOL_INFO {
  DWORD                dwServiceFlags1;
  DWORD                dwServiceFlags2;
  DWORD                dwServiceFlags3;
  DWORD                dwServiceFlags4;
  DWORD                dwProviderFlags;
  GUID                 ProviderId;
  DWORD                dwCatalogEntryId;
  WSAPROTOCOLCHAIN     ProtocolChain;
  int                  iVersion;
  int                  iAddressFamily;
  int                  iMaxSockAddr;
  int                  iMinSockAddr;
  int                  iSocketType;
  int                  iProtocol;
  int                  iProtocolMaxOffset;
  int                  iNetworkByteOrder;
  int                  iSecurityScheme;
  DWORD                dwMessageSize;
  DWORD                dwProviderReserved;
  TCHAR                szProtocol[WSAPROTOCOL_LEN+1];
} WSAPROTOCOL_INFO, *LPWSAPROTOCOL_INFO;

保留 GROUP g 。不过,对它的值没有任何限制。两个参数 lpProtocolInfo 和 dwFlags 引入了编程的巨大复杂性。我对全面测试 WSASocket() API 所需的测试程序数量进行了估算。例如, WSAPROTOCOL_INFO 结构显示了下列保守估计下的合法值数目。

注:下面的值(x n)显示每个参数可能的合法值数目。这些都是在我保守地假设只认为 szProtocol 字符串设置具有一个可能的合法值的情况,而实际上,字符串可以是任何最长 255 个字符的字符串。我的假设看来与文档没有冲突。“--?”表示我不知道该参数的有关文档或者该参数的用途是什么。我使用了 2001 年 2 月和 6 月的“平台 SDK(Platform SDK)”。

表 1. 对 WASPROTOCOL_INFO 的合法值数目的保守估计

dwServiceFlags1位字段。已定义了 19 位。2^19 = 512K 个合法值。(x 524,288)
dwServiceFlags2保留(x 1)
dwServiceFlags3保留(x 1)
dwServiceFlags4保留(x 1)
ProviderId一个 GUID,消除提供相同协议的多个供应商之间的歧义。(x 1)
dwCatalogEntryId由 WS2_32.DLL 为每个 WSAPROTOCOL_INFO 结构指定的唯一标识。(x 1)
ProtocolChain由 7 个项组成的结构。该结构表示在基本协议的顶部由一个或多个协议构成的协议链。(x 1)
iVersion协议版本标识符。(x 1)
iAddressFamily地址系列。大概与 WSASocket 接口中的相同。(x 1)
iMaxSockAddr“最大地址长度”--? (x 1)
iMinSockAddr“最小地址长度”--? (x 1)
iSocketType套接字类型。2 个值,但参数已在 socket() API 中说明。(x 1)
iProtocol与 socket() API 中的相同。我们将只考虑一个(x 1)
iProtocolMaxOffset特定于 Windows --? (x 1)
iNetworkByteOrderBIGENDIAN 或 LITTLEENDIAN(x 2)
iSecurityScheme只定义了一个。(x 1)
dwMessageSize最大消息大小。定义了三个特殊值,加上任何实际协议支持的值。(x 3)
dwProviderReserved保留。
szProtocol[WSAPROTOCOL_LEN+1]可能是一个标识协议的 Unicode 字符数组。(x 1)

dwFlags 参数有 5 个已定义的位字段。

  • WSA_FLAG_OVERLAPPED
  • WSA_FLAG_MULTIPOINT_C_ROOT
  • WSA_FLAG_MULTIPOINT_C_LEAF
  • WSA_FLAG_MULTIPOINT_D_ROOT
  • WSA_FLAG_MULTIPOINT_D_LEAF

dwFlags - 选项 2^5 = (x 32)

复杂性问题是一个实际问题。程序是用现有文档编写的,程序员希望文档都是正确的。如果象 sockets() API 这样的简单 API 因附加参数化而变得复杂,而且不太可能会全面测试附加参数空间,那么在使用更大参数空间前,应该要有令人信服的理由。劝告程序员最好跟着主线走。Microsoft 和 Linux 不会在简单的套接字 open/connect/send-recv/close 情况中犯错误。但是,很少会全面测试复杂 API 中较隐秘的角落。 尝试使 API 中的隐秘特性都会按文档指明的那样执行,会惊人地浪费大量时间。几乎在所有情况中,某些程序员只要稍许多做一些,就可使他或她避免走上未经测试的复杂 API() 的道路。

在这一思想前提下,我计算了 WSASocket() API 的附加参数空间的大小。这里发现的复杂度是在“Berkeley 套接字(Berkeley Sockets)”接口中仍存在的参数化以外的部分。根据上面的可能性,看来有

32 * 3 * 2 * 524,288 = 100,663,296

个调用组合可能出现在 Windows 操作系统。这个数不包括任何对 WSASocket() API 调用的前三个参数的参数化。对我来说,即使是理解如何能测试或验证这些参数化的实际子集,都是困难的。我承认,我不知道其中一些参数的用法,甚至它们的含义。针对这一专栏的目的,除 非读者能够显示如何通过使用 WSA 套接字的更隐秘接口来改进程序,我是避免使用这些接口的。

为回避“预言灾难的人却遭受了两次灾难”这一警语,我使用了 WSASocket() API,但是利用了 NULL WSAProtocol_Info 结构,而且只使用 WSA_FLAG_OVERLAPPED 位。仅当 WSASend 、 WSASendTo 等的参数化反映了重叠的 IO 请求时,才证明 WSA_FLAG_OVERLAPPED 是有意义的。我也不使用它们。因此,我用于“Windows 套 接字”(WSA 接口)的参数化与用于标准 Berkeley 样式的接口的参数化一样。那些对 WSA 接口和重叠 IO 问题有较好理解的人可能要尝试一下,看看您是否可以改进这里出现的性能数。

这里是为 Windows 和 Linux 创建套接字的代码:


清单 5. WSASocket 接口

#ifdef _WIN32
#   define BADSOCK    INVALID_SOCKET
    sock1 = WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
#else
#   define BADSOCK    -1
    sock1 = socket(AF_INET, SOCK_STREAM, 0);
#endif
    if(sock1 == BADSOCK) {
        printf("socket FAILED: err=%d/n", errno);
        return 1;
    }

代码片断包含了 BADSOCK 的定义,以方便阅读。在实际程序中,它们与其它特定于平台的定义捆在一起。





回页首


连接和接受连接

一旦我们过了准备阶段,Windows 和 Linux 上的套接字编程就相当类似了。这里是执行与侦听器连接的客户机代码:


清单 6. 连接
 
    if(connect(sock2, (struct sockaddr *)&addr1, sizeof(addr1))) {
        printf("connect FAILED: err=%d/n", errno);
        return 1;
    }

不需要条件定义。父进程创建套接字,并等待用该代码连接。


清单 7. 接受连接

    rc = listen(sock1,1);
    if(rc) {
        printf("Listen FAILED: err=%d/n", errno);
        return 1;
    }
    sock3 = accept(sock1, (struct sockaddr *)&addr2, (socklen_t *)&addr2len);
    if(sock3 == BADSOCK) {
        printf("Accept FAILED: err=%d/n", errno);
        return 1;
    }

这也不需要条件定义。最后,传送和接收数据。





回页首


发送和接收数据

发送数据的代码是:


清单 8. 套接字 send() 操作
 
        rc = send(sock3, (char *)&wtoken[0], 1, 0);
        if(rc == SOCKERR) {
            printf("send (1) FAILED: err=%d/n", errno);
            return 1;
        }

和


清单 9. 套接字 recv() 操作

        rc = recv(sock2, (char *)&rtoken[0], 1, 0);
        if(rc == SOCKERR) {
            printf("recv (1) FAILED: err=%d/n", errno);
            return 1;
        }





回页首


程序 sockspeedp6

Sockspeedp6 是 sockspeed 程序的第 6 版。它获得了定时测试能力(请参阅我的 上一专栏),因此永远不会用它来生成性能数。 Sockspeedp6.cpp创建一个子进程,并将数据发送给它。 因为它是面向进程的,所以父进程和子进程都可以单独启动。这一特性使您能够在一个机器上启动父进程,在另一个上启动子进程。这正是使用进程而不是线程的原因。它的用法消息显示如下:


sockspeedp6 用法消息
 
USAGE: sockspeedp6.exe [-sendbufsz N] [-recvbufsz M] [-summary] [-nodelay] /
                       [-nonblocking] hostname:port [nseconds] [bytes]
	where nseconds run time
	where bytes is the block size
	 -summary - print only blocksize and transfer rate
	sockspeedp6.exe -parent [options] - Run as Parent only
	sockspeedp6.exe -child [options] - Run as Child only
	sockspeedp6.exe -sendbufsz N - set the socket send buffer size to N
	sockspeedp6.exe -recvbufsz M - set the socket receive buffer size to M
 

Sockspeedp6.cpp 完全可以在 Red Hat 7.2 和 Windows 2000/Visual Studio 6.0 上编译。

编译器 版本
Windows/Microsoft C/C++用于 80x86 的版本 12.00.8804
Linux/GNU C/C++2.96

Sockspeed6 用来查看在一台机器上从一个进程到另一个进程的数据传输率。生成的值应该为我们提供了一个很好的想法:底层联网代码在独立于媒体速度的情况下可以传送数据的速度是多少。我研究了从 16 字节到 1 兆字节的传送大小。我没有研究无延迟选项(关闭 Nagel 算法)、非阻塞选项或者更改接收或发送缓冲区大小。这些研究将在另一个专栏中介绍。

sockspeedp6.cpp 表示的编程实践是直接明了的。 如果有更好的 Windows 或 Linux 编程技术,我很愿意了解(请使用 论坛),并将它们编码到 sockspeedp6.cpp 中以演示改进之处。Sockspeedp6 根据过去的经验不断改进。它在每个 send() 操作前更改内存,并读取 recv() 操作所获得的所有内存。正如提到的那样,它还使用我的 上一专栏中讲到的定时测试技术。





回页首


结果

所有测试都是在 576 MB 内存和 18 GB 磁盘的 IBM ThinkPad 600X 上运行的。系统引导所有三个操作系统。图 1 显示了 Windows 2000 Advanced Server、Windows XP Professional 和 Red Hat 7.2(Linux 2.4.2)的结果。


套接字传送速度、单处理器

在进行这里提到的开发和评测期间,我注意到 Windows 2000 在使用本地主机 IP 地址 127.0.0.1 时好象执行得好些。我使用本地主机 IP 地址重新对这三个平台进行测试。图 2 显示了这次的结果。对 127.0.0.1 的测试,我只是用图 1 上部的标记绘制了几条很粗糙的线。它显示 Windows 2000 真的在 127.0.0.1 地址上数据传送得比较快。但是,它也显示了 Windows XP 好象已除去了这一特性。


套接字传送速度

结果显示 Red Hat 7.2 提供了一个极为快速的套接字实现。使用这里演示的编码技术,Linux 达到的传送速率比任何一种 Windows 平台要快 2.5 倍。这些编码技术对于 Windows 是否是最理想的呢?我不知道这个问题的答案。我确实知道许多程序都用类似于 sockspeedp6 程序中包含的 send() 和 recv() 循环那样的简单循环编写。如果有改进 Windows 性能的技术,我和这里的读者都很愿意在 论坛中了解这些技术。

我们可以把这些数字与上一专栏中为管道生成的数字相比较。Linux“访问”内存的最大速度达到 400 MB/sec。在同一个图(我 上一专栏中的图 3)中,Windows“访问”内存的最大速度为 100 MB/sec,Linux 是它 的 4 倍。经过比较管道和套接字,我们发现 Linux 管道的速度比 Linux 套接字的速度将近快 5 倍,而 Windows 管道的速度比 Windows 套接字的速度快 3 倍。

以后的专栏中,我们将研究套接字的参数化,以努力找到更快的传送速率。在以后的专栏中,我们还会研究在物理介质上使用套接字。

有了从这次学习得到的知识,我们就能够预料下列问题的答案了: 如果当前没有使用介质的系统可以以 X MB/sec 的速度传送数据,则需要多少个 100 Mb/sec 适配器满足 CPU 的需要呢?一个简单的推测是:100 Mb/sec 相应于每秒 10 兆字节。将无介质的最大传送速率除以 10,您就可以得到满足 CPU 需要所需的适配器数量。这是一个前端推测。以后的专栏将判断这一推测是否合理。





回页首


结束语

我编写了一个程序 sockspeedp6.cpp 和一个 shell 脚本 sockspeedp6-sh.sh 来演示没有使用实际介质的情况下,Windows 和 Linux 上套接字的用法并测量它们的性能。 这些结果显示:通过套接字传送数据,Windows(两个版本)要比 Linux(Red Hat 7.2)慢得多。


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

相关推荐

不用API Key也能玩转Obsidian AI:本地大模型离线配置全攻略

本文详细介绍了如何在无需API Key的情况下,通过本地部署大型语言模型(LLM)为Obsidian注入AI能力。文章以Ollama为例,提供了从环境准备、模型选择到与Obsidian插件(如Text Generator)集成的完整配置攻略,旨在帮助用户打造一个安全、离线可用的智能笔记工作流,实现数据隐私与AI助力的完美结合。

weixin_29062963的博客 817

关于winsock:多点和多播语义

在考虑如何在Windows套接字2(Winsock)中支持多点和多播语义时,许多现有和提议的方案(包括IP多播,ATM点对多点连接,ST-II,T.120,H.320- MCU)进行了检查。 为了能够对各种方案进行连贯的讨论,首先要创建一个分类,以表征每个方案的基本属性,这是很有价值的。 在本文档中,术语“多点”表示多点和多播。   一、多点分类法 本节中描述的分类法首先将处理自身的控制平面...

一世豁然的专栏 756

手把手教你用OpenClaw+飞书打造论文写作AI助手(附踩坑实录)

面对几十篇文献,逐一阅读摘要都费时。我:“请提取桌面‘论文参考文献’文件夹中所有PDF的摘要,整理成表格,包含:论文标题、作者、发表年份、核心方法、主要结论。AI助手:“正在处理...已提取18篇论文摘要,汇总表格已保存到桌面‘文献摘要汇总.xlsx’。这比我自己一个个打开PDF复制粘贴快了不止100倍。OpenClaw+飞书的组合,让AI真正成为了我的“数字员工”。虽然配置过程有些曲折,但看到它在飞书里回应指令、帮我处理繁琐工作时,那种成就感无可替代。如果你也在准备论文,不妨试试这套方案。记住,

AcademicIdeas的博客 1041

套接字(socket)编程

概念: 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。 Socket的英文原义是“孔”或“插座”。作为BSD UNIX的 进程通信机制,取后一种意思。通常也称作" 套接字",用于描述

ics_0的博客 295

Unsloth Desktop 本地大模型微调量化实战指南

大语言模型的本地化定制正在成为开发者与内容创作者的重要需求,而微调与量化则是其中最关键的两项技术。LoRA 与 QLoRA 通过仅训练少量低秩矩阵,大幅降低显存占用和训练成本,让消费级 GPU 也能完成模型适配;GGUF 格式则打通了训练与推理的边界,使微调后的模型可直接接入 Ollama、llama.cpp 等主流推理引擎。本文以 Unsloth Desktop 为切入对象,从其底层加速原理出发,梳理了环境准备、模型加载、对话测试、量化导出、微调验证及 API 批量调用的完整链路,并针对显存优化、端口冲突

weixin_29055137的博客 397

8台 × 8卡 910B NPU之顶尖大模型选型分析

本文对比了2026年主流大语言模型在昇腾910B NPU集群上的部署方案。重点评估了GLM5、MiniMax M2.5、Kimi K2.5、DeepSeek V3.2和Qwen 3.5旗舰版等候选模型,从部署需求(显存占用)、能力表现(基准测试、多模态支持)和NPU生态适配度三个维度进行分析。结果显示DeepSeek V3.2综合表现最优:支持BF16/W8A8/INT4量化,在4TB显存环境下可实现2000+ TPS,首token延迟<100ms,且具备官方NPU支持。备选方案Qwen 3.5旗舰版

FeelTouch Labs 755

C++的TCP套接字编程的基本步骤

一服务端编程步骤 1创建服务端套接字(使用socket)。 2绑定套接字到一个IP地址和端口上(使用bind)。 3将套接字设置为监听模式等待连接请求(使用函数listen),这个套接字就是监听套接字。 4请求到来时,接受连接请求,返回一个新的对此次连接的套接字(accept)。 5用返回新的套接字和客户端进行通信,即发送或接收数据(使用函数send或recv),通信结束就关闭这个新创建的套接字(使用函数closesocket)。 6监听套接字继续处于监听状态,等待其他客户端的连接请求。 7如果要退出服务器

m0_67393295的博客 3450

华为OD机试真题2025双机位A卷 Java&Go 实现【采购订单】

在一个采购系统中,采购申请(PR)需要经过审批后才能生成采购订单(PO)。每个PR包含商品的单价(假设相同商品的单价一定是一样的)及数量信息。系统要求对商品进行分类处理:单价高于100元的商品需要单独处理,单价低于或等于100元的相同商品可以合并到同一采购订单PO中。针对单价低于100的小额订单,如果量大可以打折购买。

MISAYAONE的博客 1257

windows socket网络编程五:重叠IO模型

文章目录分析事件通知重叠IO结构体创建支持重叠IO的socket投递异步Accept投递异步Recv投递异步Send询问事件获取重叠信号分类处理运行结果完成例程投递异步Accept投递异步Recv投递异步Send分类处理运行结果模型流程图源码链接 分析 在解决了select模型本身的同步阻塞问题后,我们还要处理send、recv、accept的执行阻塞。 我们socket的操作本质上都是字符串的拷贝复制,重叠IO是windows提供的一种异步读写文件的机制,将读的指令以及我们的buffer投给操作系统,然后

c++小白的博客 1869

电气论文实现:前推回代在IEEE33节点中的潮流计算实现(matlab,python)

本文首先介绍了前推回代的原理。然后基于IEEE33节点算例,分别用python和matlab运用前推回代进行了潮流计算。

总裁余(余登武)博客 8608

22h2版本的win10安装Docker Desktop时页面空白

摘要:Windows10 22H2系统重装Docker时出现安装界面卡死问题,通过管理员CMD执行静默安装命令解决。命令指定了WSL-2后端及多个自定义数据存储路径(安装目录、Hyper-V数据、Windows容器数据、WSL数据),安装需等待几分钟。最终验证安装成功。

猿小白的博客 654

Socket套接字程序编写步骤

服务器端程序的编写步骤: 第一步:调用socket()函数创建一个用于通信的套接字。 第二步:给已经创建的套接字绑定一个端口号,这一般通过设置网络套接口地址和调用bind()函数来实现。 第三步:调用listen()函数使套接字成为一个监听套接字。 第四步:调用accept()函数来接受客户端的连接,这是就可以和客户端通信了。 第五步:处理客户端的连接请求。 第六步:终止连接。

zhubo22的专栏 5722

基于物联网的门禁与考勤系统(阿里云)_81

本课题设计的基于物联网的门禁与考勤管理系统,结合现代信息技术,利用指纹识别、射频卡、密码输入和远程控制等多种开锁方式,提升门禁系统的安全性和灵活性;同时,通过物联网平台进行数据上传和远程管理,极大提高了管理效率。通过智能化的考勤功能,系统可以实时记录员工的出入情况,并通过云平台进行远程查询和管理,推动门禁与考勤管理的数字化、智能化和高效化。

1万+

套接字编程:UDP通信程序编写、套接字接口、字节序转换接口

套接字编程简介,UDP通信程序编写流程,套接字相关接口,字节序转换接口

m0_63020222的博客 1055

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

python-套接字基础与 UDP 通信

一 . 实验目的 熟悉基于 Python 进行 UDP 套接字编程的基础知识,掌握使用 UDP 套接字发送和接收数据包,以及设置正确的套接字超时,了解 Ping 应用程序的基本概念,并理解其在简单判断网络状态,例如计算数据包丢失率等统计数据方面的意义。 二 . 实验内容 1. 操作系统附带的标准 Ping 命令使用 ICMP 进行通信,本实验要求编程实现一个简 单 的,非标准的,基于 UDP 进行通信的 Ping 程序。需要用 Python 编写一个 Ping 客 户端。客户端程序发送一个 pin

m0_51273386的博客 9305

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

套接字编程 --UDP通信程序的编写流程

套接字--socket编程就是网络通信程序的编写 网络通信程序的编写使用的都是套接字接口 我们可以把套接字理解为介于操作系统和用户之间网络通信的中间层面,通过这个接口可以访问内核,实现网络通信程序的编写 网络通信程序的编写:TCP/IP五层中应用层是面向程序员的一层,应用层的协议都是程序员自己订立的,应用层处理完毕后,都会将数据交给操作系统,进行传输层开始往下的封装。但是传输层提供了两个典型协议:UDP / TCP 在通信程序的编写中TCP和UDP的流程不同, 下面介绍UDP通信程序的编写: 在

XHumble的博客 735

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

什么是套接字,怎样理解套接字

套接字

m0_58323186的博客 3431

【Linux篇】第十九篇——网络套接字编程(二)(TCP套接字的编写+多进程版本+多线程版本+线程池版本)

⭐️ 本篇博客开始给大家介绍网络编程中的套接字编程——基于UDP协议的套接字和基于TCP的套接字,这篇博客主要介绍基于UDP协议套接字,下一篇介绍基于TCP协议的套接字。在介绍套接字编程之前,我会先给大家介绍一些预备知识:源IP地址和目的IP地址、源端口号和目的端口号等,方便大家更好地理解网络套接字编写的整个流程。需要注意的是,我们是站在应用层进行编写套接字的,所以接下来会用到都是传输层的接口。话不多说,先看今天的主要内容~ 目录 ............

weixin_58450087的博客 2675

监听套接字与已连接套接字

监听套接字(listening socket)和已连接套接字(connected socket)之间的区别常会使很多人感到迷惑。本文简要描述一下这两者的区别。为了说明监听套接字与已连接套接字的区别,我们先来看一下套接字在连接中的含义。 从内核的角度来看,一个套接字就是通信的一个端点。一个连接由它两端的套接了地址唯一确定,这对套接字地址叫做套接字对(socket pair),由下列4元组来表示:

Leo的博客 1万+

彻底弄懂套接字

主要介绍了socket套接字,以及在网络编程中需要用到的有关套接字函数用法与理解。

weixin_57065295的博客 1万+

套接字有三种类型:流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM)及原始套接字

1.流式套接字(SOCK_STREAM)     流式的套接字可以提供可靠的、面向连接的通讯流。如果你通过流式套接字发送了顺序的数据:“1”“2”,那么数据到达远程时候的顺序也是“1”“2”。     流式套接字可以做什么呢?你听说过Telnet应用程序吗?听过?哦,最常用的BBS服务,以及系统的远程登陆都是通过Telnet协议连接的。Telnet就是一个流式连接。你是否希望你在Telnet应

jiaxiaokai的博客 7751

什么是套接字

什么是套接字套接字(Socket)是计算机网络通信中的一个基本概念,它是一种抽象的数据结构,用于在网络应用程序之间提供通信接口。套接字可以看作是一个端点,用于发送和接收数据。它使得运行在不同机器上的应用程序能够交换信息,从而实现网络功能。套接字的概念最早由Unix系统的开发者比尔·贝宁顿(Bill Joy)在1983年引入...

weixin_42347415的博客 5342

【Linux网络篇】:Socket网络套接字以及简单的UDP网络程序编写

本文介绍了网络编程的基础知识,包括IP地址、端口号、TCP/UDP协议及网络字节序等核心概念。IP地址标识网络设备,端口号定位进程,两者结合形成套接字(Socket)实现通信。TCP协议提供可靠、面向连接的数据传输,而UDP协议无连接且不可靠。网络字节序统一为大端序,需通过htons等函数转换。此外,文章详解了sockaddr系列结构体的用途,包括通用sockaddr、IPv4专用的sockaddr_in及本地通信的sockaddr_un,并强调实际使用时需类型转换。这些是网络

2301_82347435的博客 1141

运行 Docker 容器时的安全风险:别丢了你的套接字

我们都遇到过这种情况:你只是想尝试一段命令行,但安装进程却如同抵押贷款申请那般繁琐。如果不是强制要求完成这么多步骤,你的开发环境会被永远不会再使用的库弄乱。自然, Docker 来了以后,你惊异地发现尝试一个新工具变得更容易了。但它是不是太容易了?也许是时候问问自己:在你寻求一个简单命令行工具的时候,是不是偶然间就给了 Docker 太多的系统权限?本文系国内 ITOM 管理平台 OneAPM 工程

wangpeng198688的专栏 538

python编写udp套接字程序实现步骤

使用python编写udp套接字程序

2301_78537159的博客 653

套接字编程:TCP通信程序

套接字编程:多进程&多线程,实现简易的TCP通信程序

m0_63020222的博客 2373
上一篇: 运行时: 使进程和线程同步
下一篇: socket编程学习笔记, Unix Socket和Windows Socket
Devillyd
博客等级 码龄23年 58粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值