编写一个最简单的Windows服务端和客户端程序

2023年8月4日,周五上午


编译器

我使用vs2022作为编译器

纯享版

服务端负责发送Hello给客户端,

客户端负责把Hello接收并打印出来。

服务端代码

#include<winsock2.h>
#include<string.h>
#pragma comment(lib, "ws2_32.lib")int main() {WSADATA wsaData;WSAStartup(MAKEWORD(2, 2), &wsaData);SOCKET hServSock = socket(PF_INET, SOCK_STREAM, 0);SOCKADDR_IN servAddr;memset(&servAddr, 0, sizeof(servAddr));servAddr.sin_family = AF_INET;servAddr.sin_addr.s_addr = htonl(INADDR_ANY);servAddr.sin_port = htons(9990);bind(hServSock, (SOCKADDR*)&servAddr, sizeof(servAddr));listen(hServSock, 5);SOCKADDR_IN clntAddr;int szClntAddr = sizeof(clntAddr);SOCKET hClntSock = accept(hServSock, (SOCKADDR*)&clntAddr, &szClntAddr);send(hClntSock, "Hello", sizeof("Hello"), 0);closesocket(hClntSock);closesocket(hServSock);WSACleanup();return 0;
}

客户端代码

#define _WINSOCK_DEPRECATED_NO_WARNINGS 1
#include<winsock2.h>
#include<string.h>
#include<stdio.h>
#pragma comment(lib, "ws2_32.lib")int main() {WSADATA wsaData;WSAStartup(MAKEWORD(2, 2), &wsaData);SOCKET hSocket = socket(PF_INET, SOCK_STREAM, 0);SOCKADDR_IN servAddr;memset(&servAddr, 0, sizeof(servAddr));servAddr.sin_family = AF_INET;servAddr.sin_addr.s_addr = inet_addr("127.0.0.1");servAddr.sin_port = htons(9990);connect(hSocket, (SOCKADDR*)&servAddr, sizeof(servAddr));char message[30];recv(hSocket, message, sizeof(message) - 1, 0);printf("%s\n", message);
}

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

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

相关文章

Vue3 watch监听器

概览&#xff1a;watch监听器的定义以及使用场景。在vue3中的监听器的使用方式&#xff0c;watch的三个参数&#xff0c;以及进一步了解第一个参数可以是一个属性&#xff0c;也可以是一个数组的形式包含多个属性。 watch在vue3和vue2中的使用&#xff1a; vue3中&#xff1a…

使用Jackson自定义序列化操作(Jackson – Custom Serializer)

目录 Standard Serialization of an Object GraphCustom Serializer on the ObjectMapperCustom Serializer on the Class Standard Serialization of an Object Graph Data NoArgsConstructor AllArgsConstructor public class Item {public int id;public String itemName;p…

java中pageHelper插件各个函数介绍

PageHelper是一个用于对MyBatis进行分页查询的Java插件。它提供了一组函数来配置和使用分页功能。以下是PageHelper插件中几个常用函数的介绍&#xff1a; startPage(int pageNum, int pageSize) 该函数用于开启分页查询&#xff0c;指定要查询的页码&#xff08;pageNum&#…

uniapp-疫情应急管理系统学生端

1 疫情资讯展示 <template><view class"container"><uni-section title"自定义卡片内容" type"line"><uni-card title"基础卡片" class"card-box" v-for"(item,index) in epidemicNewsList"…

优雅地切换node版本(windows)

文章目录 1、下载并安装nvm2、nvm的使用3、处理npm版本与nodejs版本不匹配问题&#xff08;通常不会有这个问题&#xff09; 1、下载并安装nvm 卸载已安装的node&#xff1a;控制面板-程序-找到node并卸载 通常在控制面板中卸载后&#xff0c;nodejs目录、环境变量、注册表就自…

oracle会话打满

1.查看当前连接情况 col machine for a20 col program for a40 col sql_id for a20 set linesize 300 set pagesize 300 select machine,program,sql_id,count(1) from v$session group by machine,program,sql_id order by 4 desc;MACHINE PROGRAM SQL_ID …

面试之快速学习c++11 - C++返回值类型后置(跟踪返回值类型) 和 using

学习地址&#xff1a; http://c.biancheng.net/view/3730.html 1. C返回值类型后置&#xff08;跟踪返回值类型&#xff09; eg: template <typename R, typename T, typename U> R add1(T t, U u) {return tu; }void testAdd1() {int a 1;float b 1.0;auto result …

【MySQL】DQL语句

8&#xff0c;DQL 下面是黑马程序员展示试题库数据的页面 页面上展示的数据肯定是在数据库中的试题库表中进行存储&#xff0c;而我们需要将数据库中的数据查询出来并展示在页面给用户看。上图中的是最基本的查询效果&#xff0c;那么数据库其实是很多的&#xff0c;不可能在将…

Codeforces Round 881 (Div. 3)F1题解

文章目录 [Omsk Metro (simple version)](https://codeforces.com/contest/1843/problem/F1)问题分析1.分析如何知道根节点到某个结点的区间内是否存在一个子段和为k2.方法1使用树形DP来动态维护每个节点到根节点的最大子段和和最小子段和代码 Omsk Metro (simple version) 问题…

STM32使用HAL库中外设初始化MSP回调机制及中断回调机制详解

STM32使用HAL库之Msp回调函数 1.问题提出 在STM32的HAL库使用中&#xff0c;会发现库函数大都被设计成了一对&#xff1a; HAL_PPP/PPPP_Init HAL_PPP/PPPP_MspInit 而且HAL_PPP/PPPP_MspInit函数的defination前面还会有__weak关键字 上面的PPP/PPPP代表常见外设的名称为…

【css】使用float实现水平导航栏

该实例使用float 浮动实现元素浮动在水平方向&#xff0c;从而实现水平导航栏效果。 overflow: hidden&#xff1a;当不给父级元素设置高度的时候&#xff0c;其内部元素浮动后会导致下面的元素顶上去&#xff0c;这是因为子元素浮动后&#xff0c;子元素脱离标准流&#xff0…

组合总和——力扣39

文章目录 题目描述回溯 题目描述 回溯 class Solution { public:vector<vector<int>> res;vector<int> seq; void dfs(vector<int>& nums, int pos, int target){if(target0){res.emplace_back(seq);return;}if(posnums.size()){return;}//直接跳过…

Python源码编译时碰到的问题:fatal error LNK1104: cannot open file libffi-7.lib

因为工作原因需要对python源码进行调试&#xff0c;所以Github上拉下来的cpython源码&#xff0c;编译一切顺利&#xff0c;除了一个报告说 LNK1104&#xff1a;无法打开libffi-7.lib 因为这些externals库是通过&#xff1a;PCbuild\get_externals.bat下载下来的&#xff0c;…

Java实现十大经典排序算法之快速排序

0 算法简介 快速排序是一种高效率排序算法&#xff0c;它是对冒泡排序的一种改进&#xff0c;它也是一种不稳定排序算法。快速排序的核心是比较、交换和递归。 在待排序数组中指定一个基准元素pivot&#xff08;一般选取数组首元素&#xff09;&#xff0c;使得数组排序之后基…

uniapp 使用iconfont

问题描述&#xff1a;在开发过程中会遇到使用自定义icon的情况&#xff0c;在uniapp项目中使用iconfont步骤如下。 问题解决 步骤一&#xff1a; 打开iconfont网址------我的项目-----下载至本地 下载成功的文件内容&#xff1a; 步骤二&#xff1a; 以管理员身份运行终端&am…

Linux的基本指令(2)

指令1&#xff1a;man 作用&#xff1a;可以查询linux指令语法内容。 格式&#xff1a; man 指令 安装man指令&#xff1a; yum install -y man-pages 例如&#xff1a; 查询 指令 ls 的语法内容。 man ls 查询 fork 指令的语法内容。 man fork 在man中存在9个手册&…

华为OD面试记录

The experience of applying for software test engineer(Dispatcher) 记录保存 招聘岗位: 测试工程师 Base:西安 华为面试流程如下&#xff1a; 流程名内容机试三题,总分400分,最后一道题200分人力资源面试询问私人问题&#xff0c;不谈薪资一面技术面二面技术面主管问项目…

根据Pytorch源码实现的 ResNet18

一&#xff0c;类模块定义: import torch import torch.nn as nn import torch.nn.functional as F from torch import Tensorclass ResBlock(nn.Module):def __init__(self, inchannel, outchannel, stride1) -> None:super(ResBlock, self).__init__()# 这里定义了残差块…

CountDownLatch的使用(判断多个线程是否都执行完毕)

使用CountDownLatch的情景 有一些”多线程下载器"&#xff0c;可以把一个大的文件给拆分成多个小的部分&#xff0c;使用多个线程分别下载&#xff0c;每个线程负责下载一部分&#xff0c;此时每个线程都是一个网络连接&#xff0c;这样就可以大幅度提高下载速度。 假设&a…

Spring Boot使用的关键点

目录 1. 构建系统 1.1. 依赖管理 1.2. Maven Maven项目结构 1.3. Starter 2. 代码结构 2.1. “default” 包 2.2. 启动类的位置 3. Configuration 类 3.1. 导入额外的 Configuration 类 3.2. 导入 XML Configuration 4. 自动装配&#xff08;配置&#xff09; 4.1…