【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: socket: 套接字函数创建绑定到特定传输服务提供程序的套接字。 函数原型:SOCKET WSAAPI socket([in] int af,[in] int type,[in] int protocol );参数: af:地址规范系列: AF_INET:IPv4&…...
Qt 事件循环
引出 UI程序之所叫UI程序,是因为需要与用户有交互,用户交互一般是通过鼠标键盘等的输入设备,那UI程序就需要有能随时响应用户交互的能力。 一个C程序的main函数大概是下面这样: int main() {...return 0; } 我们如何使程序能随…...
【趣味随笔】YOLO的“进化史”极简版(YOLO v1-->YOLOP)
📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...
Leetcode421. 数组中两个数的最大异或值
Every day a Leetcode 题目来源:421. 数组中两个数的最大异或值 解法1:贪心 位运算 初始化答案 ans 0。从最高位 high_bit 开始枚举 i,也就是 max(nums) 的二进制长度减一。设 newAns ans 2i,看能否从数组 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:哈希数组
算是哈希的容器:数组(适合连续存放);set,map(适合无序存放)。所以数组操作就是hash[i];而set,map.insert(元素),map可以map[]是因为map存放了键值对可以索引查找。关于几个数组相加等…...
腾讯云3年轻量2核2G4M和2核4G5M服务器540元三年
腾讯云轻量应用服务器特价是有新用户限制的,所以阿腾云建议大家选择3年期轻量应用服务器,一劳永逸,免去续费困扰。腾讯云轻量应用服务器3年可以选择2核2G4M和2核4G5M带宽,3年轻量2核2G4M服务器540元,2核4G5M轻量应用服…...
程序员的护城河:职业发展的关键元素
目录 1. 技术深度与广度 2. 项目经验与实际操作 3. 沟通与团队协作 4. 持续学习与自我更新 5. 社区参与与开源贡献 6. 创新思维与解决问题的能力 7. 职业规划与自我管理 结语 在科技日新月异的今天,程序员的竞争已经不再仅仅依赖于技术水平,而是…...
基于SpringBoot+Vue的在线学习平台系统
基于SpringBootVue的在线学习平台系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue工具: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打开一个项目的时候,有时候这个项目目录是有的,但是用idea的open却找不到,有时候我要重新关闭窗口,再open好多次才有 于是我现在使用命令打开,先把idea安装路径的bin目录放在path里面 然后cd到项目路径&…...
javaScript爬虫程序抓取评论
由于评论区目前没有开放的API接口,所以我们不能直接通过编程获取到评论区的内容。但是,我们可以通过模拟浏览器的行为来实现这个功能。以下是一个使用Python的requests库和BeautifulSoup库来实现这个功能的基本思路: import requests from bs…...
RT-DETR 应用 CARAFE:特征内容感知重新组装
特征上采样是现代卷积神经网络架构中的关键操作,例如特征金字塔。其设计对于密集预测任务,如目标检测和语义/实例分割至关重要。在本研究中,我们提出了一种称为内容感知特征重组(CARAFE)的通用、轻量级且高效的操作符,以实现这一目标。CARAFE具有以下几个优点:(1)大的…...
Git Commit 之道:规范化 Commit Message 写作指南
1 commit message 规范 commit message格式都包括三部分:Header,Body和Footer <type>(<scope>): <subject><body><footer>Header是必需的,Body和Footer则可以省略 1.1 Header Type(必需…...
【机试题】LazyIterator迭代器懒加载问题
将下面这个未完成的Java工具类补充完成,实现懒加载的功能,该类需要实现Iterable接口,能够遍历所有数据。具体要求如下: 工具类提供了一个ValueLoader接口,用于获取数据,其中ValueLoader的接口定义为&#x…...
【面试经典150 | 位运算】位1的个数
文章目录 写在前面Tag题目来源题目解读解题思路方法一:循环检查二进制位方法二:位运算优化方法三:__builtin_popcount() 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…...
vue中数据代理和事件处理
数据代理 直接在对象下可直接修改属性的值,而Object提供defineProperty()对属性进行控制 <script>let perosn {name: 小蜜,sex: 男,//age: 19 }Object.defineProperty(perosn,age,{value: 19//enumerable: true ,添加enumerable将默认值改为true,…...
Unity之NetCode多人网络游戏联机对战教程(8)--玩家位置同步
文章目录 前言添加相机玩家添加对应组件服务端权威(server authoritative)客户端权威(client authoritative)服务端同步位置阅读与理解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的演变: .NET Framework: 最初由Microsoft引入,是一个Windows上的全功能框架。它包含了ASP.NET、Windows Presentation Foundation(WPF)、Windows Communication Foundation(WCFÿ…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
