当前位置: 首页 > news >正文

【Windows网络编程】二.TCP套接字编程与主机上线实验

API:

  • socket:

    套接字函数创建绑定到特定传输服务提供程序的套接字。

    • 函数原型:
      SOCKET WSAAPI socket([in] int af,[in] int type,[in] int protocol
      );
      
    • 参数:
      • af:地址规范系列:

        AF_INET:IPv4,AF_INET6:IPv6

      • type:新套接字的类型规范

        SOCK_STREAM:TCP

        SOCK_DGRAM:UDP

      • protocol:

        如果指定值 0,则调用方不希望指定协议,服务提供商将选择要使用的 协议

    • 返回值:如果未发生错误,套接字将返回引用新套接字的描述符,否则,将返回值INVALID_SOCKET,并且可以通过调用WSAGetLastError来检索特定的错误代码
  • listen:

    侦听函数将套接字置于侦听传入连接的状态

    • 函数原型:

      int WSAAPI listen([in] SOCKET s,[in] int    backlog
      );
      
    • 参数:

      s:表示绑定的未连接的套接字的描述符

      backlog:挂起的连接队列的最大长度

    • 返回值:如果未发生错误,侦听将返回0

  • accept:

    连接套接字

  • sockopt:

    设置套接字选项

    • 函数原型:
      int setsockopt([in] SOCKET     s,[in] int        level,[in] int        optname,[in] const char *optval,[in] int        optlen
      );
      
    • 参数:
      • s:标识套接字的描述符
      • level:定义选项的级别
      • optname:要为其设置的套接字选项
      • optval:指向指定请求选项值得缓冲区的指针
      • optlen:缓冲区大小
    • 返回值:

TCP服务端:

#include <iostream>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")int main() {WORD wVersionRequested = MAKEWORD(2, 2);WSADATA lpWSAData;//启动Winsock DLL的使用if (WSAStartup(wVersionRequested, &lpWSAData)) {std::cout << "WSAStartup Error!" << std::endl;system("pause");return 0;}if (LOBYTE(wVersionRequested)!=2||HIBYTE(wVersionRequested)!=2){WSACleanup();std::cout << "wVersion Error!" << std::endl;}//创建套接字:SOCKET socSrv = socket(AF_INET, SOCK_STREAM, 0);SOCKADDR_IN addSrv;addSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);addSrv.sin_family = AF_INET;addSrv.sin_port = htons(8000);//绑定:bind(socSrv, (sockaddr*)&addSrv, sizeof(sockaddr));//监听:listen(socSrv,5);SOCKADDR_IN addrClient;int nLength = sizeof(sockaddr);while (true) {//在套接字上尝试传入连接SOCKET sockConn = accept(socSrv, (sockaddr*)&addrClient, &nLength);//向客户端发送消息:send(sockConn, "已登录至服务器", strlen("已登录至服务器") + 1, 0);char recvBuffer[MAX_PATH]{ 0 };recv(sockConn, recvBuffer, MAX_PATH, 0);std::cout << "客户端消息:" << recvBuffer << std::endl;}closesocket(socSrv);WSACleanup();system("pause");return 0;
}

TCP客户端:

#include <iostream>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")int main() {//初始化Winsock DLL的使用WORD wVersionRequested = MAKEWORD(2, 2);WSAData lpWSAData;if (WSAStartup(wVersionRequested, &lpWSAData)) {printf("WSAStartup Error!\r\n");system("pause");return 0;}if (LOBYTE(wVersionRequested) != 2 || LOBYTE(wVersionRequested) != 2) {printf("wVersion Error!\r\n");system("pause");return 0;}//创建套接字:SOCKET SocClient = socket(AF_INET, SOCK_STREAM, 0);SOCKADDR_IN addSrv;addSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");addSrv.sin_family = AF_INET;addSrv.sin_port = htons(8000);//连接connect(SocClient, (sockaddr*)&addSrv, sizeof(sockaddr));char recvBuffer[MAX_PATH]{ 0 };recv(SocClient, recvBuffer, MAX_PATH, 0);printf("服务器端消息:%s\r\n", recvBuffer);send(SocClient, "Hello Server", strlen("Hello Server") + 1, 0);closesocket(SocClient);WSACleanup();system("pause");return 0;
}

相关文章:

【Windows网络编程】二.TCP套接字编程与主机上线实验

API&#xff1a; socket&#xff1a; 套接字函数创建绑定到特定传输服务提供程序的套接字。 函数原型&#xff1a;SOCKET WSAAPI socket([in] int af,[in] int type,[in] int protocol );参数&#xff1a; af&#xff1a;地址规范系列&#xff1a; AF_INET&#xff1a;IPv4&…...

Qt 事件循环

引出 UI程序之所叫UI程序&#xff0c;是因为需要与用户有交互&#xff0c;用户交互一般是通过鼠标键盘等的输入设备&#xff0c;那UI程序就需要有能随时响应用户交互的能力。 一个C程序的main函数大概是下面这样&#xff1a; int main() {...return 0; } 我们如何使程序能随…...

【趣味随笔】YOLO的“进化史”极简版(YOLO v1-->YOLOP)

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…...

Leetcode421. 数组中两个数的最大异或值

Every day a Leetcode 题目来源&#xff1a;421. 数组中两个数的最大异或值 解法1&#xff1a;贪心 位运算 初始化答案 ans 0。从最高位 high_bit 开始枚举 i&#xff0c;也就是 max⁡(nums) 的二进制长度减一。设 newAns ans 2i&#xff0c;看能否从数组 nums 中选两个…...

SPRINGBOOT整合CXF发布WEB SERVICE和客户端调用(用户和密码验证)

主要分为客户端和服务端 服务端 pom配置 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.3</version><relativePath/> <!-- lookup parent fro…...

代码随想录训练营Day5:哈希数组

算是哈希的容器&#xff1a;数组&#xff08;适合连续存放&#xff09;&#xff1b;set&#xff0c;map&#xff08;适合无序存放&#xff09;。所以数组操作就是hash[i];而set,map.insert(元素)&#xff0c;map可以map[]是因为map存放了键值对可以索引查找。关于几个数组相加等…...

腾讯云3年轻量2核2G4M和2核4G5M服务器540元三年

腾讯云轻量应用服务器特价是有新用户限制的&#xff0c;所以阿腾云建议大家选择3年期轻量应用服务器&#xff0c;一劳永逸&#xff0c;免去续费困扰。腾讯云轻量应用服务器3年可以选择2核2G4M和2核4G5M带宽&#xff0c;3年轻量2核2G4M服务器540元&#xff0c;2核4G5M轻量应用服…...

程序员的护城河:职业发展的关键元素

目录 1. 技术深度与广度 2. 项目经验与实际操作 3. 沟通与团队协作 4. 持续学习与自我更新 5. 社区参与与开源贡献 6. 创新思维与解决问题的能力 7. 职业规划与自我管理 结语 在科技日新月异的今天&#xff0c;程序员的竞争已经不再仅仅依赖于技术水平&#xff0c;而是…...

基于SpringBoot+Vue的在线学习平台系统

基于SpringBootVue的在线学习平台系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 用户界面 登录界面 管理员界面 摘要 本文设计并实现了一套基于Spri…...

Kafka+redis分布式锁结合使用心得总结

#kafka部分 KafkaListener(topics "#{${vsmart_alert_detection_tms_send_message_topic}.split(,)}", groupId "${vsmart.alert.detection.consumer.group}") public void vsmartAlertDetectionTmsSendMessage(ConsumerRecord<?, ?> record, A…...

cmd打开idea

当我们用idea打开一个项目的时候&#xff0c;有时候这个项目目录是有的&#xff0c;但是用idea的open却找不到&#xff0c;有时候我要重新关闭窗口&#xff0c;再open好多次才有 于是我现在使用命令打开&#xff0c;先把idea安装路径的bin目录放在path里面 然后cd到项目路径&…...

javaScript爬虫程序抓取评论

由于评论区目前没有开放的API接口&#xff0c;所以我们不能直接通过编程获取到评论区的内容。但是&#xff0c;我们可以通过模拟浏览器的行为来实现这个功能。以下是一个使用Python的requests库和BeautifulSoup库来实现这个功能的基本思路&#xff1a; import requests from bs…...

RT-DETR 应用 CARAFE:特征内容感知重新组装

特征上采样是现代卷积神经网络架构中的关键操作,例如特征金字塔。其设计对于密集预测任务,如目标检测和语义/实例分割至关重要。在本研究中,我们提出了一种称为内容感知特征重组(CARAFE)的通用、轻量级且高效的操作符,以实现这一目标。CARAFE具有以下几个优点:(1)大的…...

Git Commit 之道:规范化 Commit Message 写作指南

1 commit message 规范 commit message格式都包括三部分&#xff1a;Header&#xff0c;Body和Footer <type>(<scope>): <subject><body><footer>Header是必需的&#xff0c;Body和Footer则可以省略 1.1 Header Type&#xff08;必需&#xf…...

【机试题】LazyIterator迭代器懒加载问题

将下面这个未完成的Java工具类补充完成&#xff0c;实现懒加载的功能&#xff0c;该类需要实现Iterable接口&#xff0c;能够遍历所有数据。具体要求如下&#xff1a; 工具类提供了一个ValueLoader接口&#xff0c;用于获取数据&#xff0c;其中ValueLoader的接口定义为&#x…...

【面试经典150 | 位运算】位1的个数

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;循环检查二进制位方法二&#xff1a;位运算优化方法三&#xff1a;__builtin_popcount() 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…...

vue中数据代理和事件处理

数据代理 直接在对象下可直接修改属性的值&#xff0c;而Object提供defineProperty()对属性进行控制 <script>let perosn {name: 小蜜,sex: 男,//age: 19 }Object.defineProperty(perosn,age,{value: 19//enumerable: true ,添加enumerable将默认值改为true&#xff0c…...

Unity之NetCode多人网络游戏联机对战教程(8)--玩家位置同步

文章目录 前言添加相机玩家添加对应组件服务端权威&#xff08;server authoritative&#xff09;客户端权威&#xff08;client authoritative&#xff09;服务端同步位置阅读与理解PlayerTransformSync.csNetworkVariableUploadTransformSyncTransform 后话 前言 承接上篇&a…...

spring boot 中@Value读取中文配置时乱码

1.spring boot 读取application.properties 该文件是iso8859编码 如果是直接写中文 读取时会乱码 显示成?? 必须得转ascii码才能正常显示 其他方法测试也不行 Value("${apig.order.tiaokong.qianzi}") private String apigOrderTiaokongQianzi;...

选择.NET 还是 Java?

1、.NET Framework的演变&#xff1a; .NET Framework&#xff1a; 最初由Microsoft引入&#xff0c;是一个Windows上的全功能框架。它包含了ASP.NET、Windows Presentation Foundation&#xff08;WPF&#xff09;、Windows Communication Foundation&#xff08;WCF&#xff…...

Agent智能体开发:基于万象熔炉·丹青幻境构建自主任务执行系统

Agent智能体开发&#xff1a;基于万象熔炉丹青幻境构建自主任务执行系统 最近AI圈子里“智能体”&#xff08;Agent&#xff09;这个词特别火&#xff0c;但很多人可能还不太清楚它到底能做什么。简单来说&#xff0c;它不再是那个你问一句、它答一句的聊天机器人&#xff0c;…...

MogFace人脸检测工具保姆级教程:5分钟搭建本地高精度检测环境

MogFace人脸检测工具保姆级教程&#xff1a;5分钟搭建本地高精度检测环境 1. 为什么选择MogFace进行人脸检测&#xff1f; 人脸检测是计算机视觉领域的基础任务&#xff0c;但实际应用中常遇到各种挑战&#xff1a;小尺寸人脸检测困难、侧脸和遮挡导致漏检、密集人群检测不准…...

零基础玩转GLM-OCR:单卡4090一键部署,纯文本/公式/表格全能解析

零基础玩转GLM-OCR&#xff1a;单卡4090一键部署&#xff0c;纯文本/公式/表格全能解析 1. 工具概览&#xff1a;你的全能文档解析助手 想象一下&#xff0c;你手头有一堆扫描的PDF、照片或截图&#xff0c;里面有重要文字、复杂公式和结构化表格。传统OCR工具要么识别不准&a…...

OpenClaw语音控制扩展:千问3.5-27B实现本地语音指令识别

OpenClaw语音控制扩展&#xff1a;千问3.5-27B实现本地语音指令识别 1. 为什么需要语音控制OpenClaw&#xff1f; 去年冬天的一个深夜&#xff0c;我正在赶制一份数据分析报告。双手忙着在Excel和Python脚本间切换时&#xff0c;突然冒出一个念头&#xff1a;如果能用语音直接…...

零基础入门转录组上游分析——第四章(序列比对)

零基础入门转录组上游分析——第四章&#xff08;序列比对&#xff09; 目录零基础入门转录组上游分析——第四章&#xff08;序列比对&#xff09;1. 之前章节结果的查看1. 构建参考基因组索引2. 序列比对3. 压缩和排序XXX.sam文件4. 构建bam文件的索引&#xff08;可选&#…...

营销管理5步流程指南

什么是营销管理流程&#xff1f; 营销管理流程是一种规划、组织和控制一个组织的营销活动的方法。营销管理流程是一套系统性的步骤&#xff0c;帮助企业通过满足客户需求来实现其目标。营销管理流程中的每一个步骤都帮助企业实现这些目标。 营销流程始于定义公司的组织目标和目…...

Openblocks部署教程:快速构建企业内部应用

&#x1f449; 推荐使用 莱卡云服务器 搭建 Openblocks 低代码平台&#xff0c;能够提供稳定的运行环境与良好的访问体验&#xff0c;适合企业内部系统长期部署与扩展。一、什么是 Openblocks&#xff1f;Openblocks 是一个开源低代码平台&#xff0c;旨在帮助开发者通过可视化…...

LeetCode 3655. 区间乘法查询后的异或2 解题报告(Python)

LeetCode 3655. 区间乘法查询后的异或2 解题报告&#xff08;Python&#xff09; 前言 本题是 LeetCode 第 3655 号问题&#xff0c;属于一道结合了根号分治、差分思想与模运算的综合应用题。题目要求在一个数组上执行大量区间“跳跃式”乘法操作&#xff0c;并最终返回所有元素…...

OpenClaw调试技巧大全:Qwen3-14b_int4_awq任务失败排查指南

OpenClaw调试技巧大全&#xff1a;Qwen3-14b_int4_awq任务失败排查指南 1. 为什么我们需要系统化的调试方法 上周我在尝试用OpenClaw自动整理项目文档时&#xff0c;遇到了一个诡异的问题&#xff1a;任务执行到一半突然卡住&#xff0c;既没有报错也没有继续执行。花了整整三…...

JPEGENC:4KB RAM下运行的嵌入式JPEG编码器

1. JPEGENC&#xff1a;面向资源受限MCU的轻量级JPEG编码器深度解析1.1 设计哲学与工程定位JPEGENC并非对libjpeg或mozjpeg等通用JPEG库的简单裁剪&#xff0c;而是在裸机&#xff08;Bare-metal&#xff09;约束下重构的嵌入式专用编码器。其核心设计目标直指MCU开发中最尖锐的…...