【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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/139886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费分享一套基于Springboot+Vue的在线考试系统,挺漂亮的

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringbootVue的在线考试系统&#xff0c;分享下哈。 项目视频演示 【免费】springbootvue在线考试系统 Java毕业设计_哔哩哔哩_bilibili【免费】springbootvue在线考试系统 Java毕业设计项目来自互联网&a…

劲松HPV防治诊疗中心发布:HPV感染全面防治解决方案

在当今社会&#xff0c;HPV(人乳头瘤病毒)感染问题已成为广大公众关注的焦点。作为一种高度传染性的病毒&#xff0c;HPV感染不仅可能导致生殖器疣&#xff0c;还可能引发各种癌症。面对这一严重威胁&#xff0c;劲松HPV防治诊疗中心以其专业的医疗团队、正规的治疗流程和全方位…

ZYNQ_project:key_led

条件里是十进制可以不加进制说明&#xff0c;编译器默认是10进制&#xff0c;其他进制要说明。 实验目标&#xff1a; 模块框图&#xff1a; 时序图&#xff1a; 代码&#xff1a; include "para.v"module key_filter (input wire …

长春理工大学漏洞报送证书

获取来源&#xff1a;edusrc&#xff08;教育漏洞报告平台&#xff09; url&#xff1a;主页 | 教育漏洞报告平台 兑换价格&#xff1a;10金币 获取条件&#xff1a;提交长春理工大学任意中危或以上级别漏洞

Linux驱动开发——PCI设备驱动

目录 一、 PCI协议简介 二、PCI和PCI-e 三、Linux PCI驱动 四、 PCI设备驱动实例 五、 总线类设备驱动开发习题 一、 PCI协议简介 PCI (Peripheral Component Interconnect&#xff0c;外设部件互联) 局部总线是由Intel 公司联合其他几家公司一起开发的一种总线标准&#…

【数据结构】树与二叉树(十二):二叉树的递归创建(算法CBT)

文章目录 5.2.1 二叉树二叉树性质引理5.1&#xff1a;二叉树中层数为i的结点至多有 2 i 2^i 2i个&#xff0c;其中 i ≥ 0 i \geq 0 i≥0。引理5.2&#xff1a;高度为k的二叉树中至多有 2 k 1 − 1 2^{k1}-1 2k1−1个结点&#xff0c;其中 k ≥ 0 k \geq 0 k≥0。引理5.3&…

ElastaticSearch ---- es基础概念及命令

Elasticsearch 介绍 Elasticsearch 是一个高度可扩展且开源的全文检索和分析引擎。可以快速且近实时地存储&#xff0c;检索以及分析海量数据。 Elasticsearch 应用场景&#xff1a; 提供搜索和自动完成功能。 ELK(Elasticsearch/Logstash/Kibana )&#xff0c;Logstash收集…

mysql基础 --子查询

文章目录 子查询子查询案例 子查询 一个查询语句&#xff0c;嵌套在另一个查询语句内部&#xff1b;子查询先执行&#xff0c;其结果被外层主查询使用&#xff1b;子查询放入括号内&#xff1b;子查询放在比较条件的右侧&#xff1b;子查询返回一条&#xff0c;为单行子查询(对…

python工具HIKVISION视频编码设备接入网关任意文件下载

python工具 构造payload /serverLog/downFile.php?fileName../web/html/serverLog/downFile.php漏洞证明 文笔生疏&#xff0c;措辞浅薄&#xff0c;望各位大佬不吝赐教&#xff0c;万分感谢。 免责声明&#xff1a;由于传播或利用此文所提供的信息、技术或方法而造成的任何…

PyTorch技术和深度学习——三、深度学习快速入门

文章目录 1.线性回归1&#xff09;介绍2&#xff09;加载自由泳冠军数据集3&#xff09;从0开始实现线性回归模型4&#xff09;使用自动求导训练线性回归模型5&#xff09;使用优化器训练线性回归模型 2.使用torch.nn模块构建线性回归模型1&#xff09;使用torch.nn.Linear训练…

通过SD卡给某摄像头植入可控程序

0x01. 摄像头卡刷初体验 最近研究了手上一台摄像头的sd卡刷机功能&#xff0c;该摄像头只支持fat32格式的sd卡&#xff0c;所以需要先把sd卡格式化为fat32&#xff0c;另外微软把fat32限制了最大容量32G&#xff0c;所以也只能用不大于32G的sd卡来刷机。 这里使用32G的sd卡来…

基于樽海鞘群算法优化概率神经网络PNN的分类预测 - 附代码

基于樽海鞘群算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于樽海鞘群算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于樽海鞘群优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

vColorPicker与vue3-colorPicker——基于 Vue 的颜色选择器插件

文章目录 前言样例特点 一、使用步骤&#xff1f;1. 安装2.引入3.在项目中使用 vcolorpicker 二、选项三、事件四、问题反馈问题所在安装引入例子效果图 前言 vColorPicker——官网 vColorPicker——GitHub 样例 vColorPicker是基于 Vue 的一款颜色选择器插件&#xff0c;仿照…

【QT】续写文本存储到文件

续写文本到文件 使用标记QFile::WriteOnly| QIODevice::Append打开文件 QString strConfigFile "C:\\Users\\xiaosheng\\Desktop\\Log.txt"; QFile file1(strConfigFile); QString strLog2; strLog2 "strKeyId" "\n"; if (file1.open(QFile…

【入门Flink】- 10基于时间的双流联合(join)

统计固定时间内两条流数据的匹配情况&#xff0c;需要自定义来实现——可以用窗口&#xff08;window&#xff09;来表示。为了更方便地实现基于时间的合流操作&#xff0c;Flink 的 DataStrema API 提供了内置的 join 算子。 窗口联结&#xff08;Window Join&#xff09; 一…

面向对象基础(以python语言为例)

1、定义一个类&#xff1b;实例化类的对象&#xff1b;调用类中的方法 #定义一个类 class Student:#类方法&#xff08;即函数&#xff09;def study(self,course_name):print(f学生正在学习{course_name})def play(self):print("xx学生正在玩游戏")#实例化&#xf…

Linux c/c++服务器开发实践

在Linux C开发环境中&#xff0c;通常有两种方式来开发多线程程序&#xff0c;一种是利用POSIX多线程 API函数来开发多线程程序&#xff0c;另外一种是利用C自带线程类来开发程序。 常见的与线程相关的基本API函数&#xff1a; API函数含义pthread_create创建线程pthread_exi…

从0到1实现一个前端监控系统(附源码)

目录 一、从0开始 二、上报数据方法 三、上报时机 四、性能数据收集上报 收集上报FP 收集上报FCP 收集上报LCP 收集上报DOMContentLoaded 收集上报onload数据 收集上报资源加载时间 收集上报接口请求时间 五、错误数据收集上报 收集上报资源加载错误 收集上报js错…

详解JS中的对象

1、语法 对象的声明有两种形式&#xff0c;声明&#xff08;文字&#xff09;形式和构造形式 // 文字形式 var mtObj {key:value... } // 构造形式 var myObj new Object() myObj.key value构造形式与文字形式生成的对象是一样的&#xff0c;唯一的区别在于文字形式可以添…

Linux下C++调用python脚本实现LDAP协议通过TNLM认证连接到AD服务器

1.前言 首先要实现这个功能&#xff0c;必须先搞懂如何通过C调用python脚本文件最为关键&#xff0c;因为两者的环境不同。本质上是在 c 中启动了一个 python 解释器&#xff0c;由解释器对 python 相关的代码进行执行&#xff0c;执行完毕后释放资源。 2 模块功能 2.1python…