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

TCP服务端主动向客户端发送数据

C++ TCP 服务端和客户端通信的例子

在此基础上,要修改服务端代码,使其能够每秒向客户端发送当前时间,你需要添加一个循环,每次循环发送当前时间给客户端。同时,你需要在客户端代码中添加接收服务端发送的数据的逻辑。

以下是修改后的代码:

服务端代码:

#include <iostream>
#include <winsock2.h>
#include <Ws2tcpip.h> // for inet_ntop
#include <ctime> // for time and localtime_s#pragma comment(lib, "Ws2_32.lib")#define PORT 8080int main() {WSADATA wsaData;SOCKET serverSocket, newSocket;struct sockaddr_in serverAddr, clientAddr;int clientAddrLen = sizeof(clientAddr);char buffer[1024] = { 0 };const char* message = "Hello from server";// 初始化 Winsockif (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {std::cerr << "WSAStartup failed." << std::endl;return 1;}// 创建服务器套接字if ((serverSocket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {std::cerr << "Socket creation failed." << std::endl;WSACleanup();return 1;}// 设置服务器地址serverAddr.sin_family = AF_INET;serverAddr.sin_addr.s_addr = INADDR_ANY;serverAddr.sin_port = htons(PORT);// 将套接字绑定到服务器地址if (bind(serverSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) {std::cerr << "Bind failed." << std::endl;closesocket(serverSocket);WSACleanup();return 1;}// 监听连接if (listen(serverSocket, 5) == SOCKET_ERROR) {std::cerr << "Listen failed." << std::endl;closesocket(serverSocket);WSACleanup();return 1;}std::cout << "Server listening on port " << PORT << std::endl;// 接受客户端连接if ((newSocket = accept(serverSocket, (struct sockaddr*)&clientAddr, &clientAddrLen)) == INVALID_SOCKET) {std::cerr << "Accept failed." << std::endl;closesocket(serverSocket);WSACleanup();return 1;}// Convert client IP address to stringchar clientIP[INET_ADDRSTRLEN];inet_ntop(AF_INET, &clientAddr.sin_addr, clientIP, INET_ADDRSTRLEN);std::cout << "Connection accepted from " << clientIP << ":" << ntohs(clientAddr.sin_port) << std::endl;// 每秒向客户端发送当前时间while (true) {// 获取当前时间time_t currentTime = time(nullptr);struct tm localTime;localtime_s(&localTime, &currentTime);std::string timeString = asctime(&localTime);// 发送当前时间给客户端if (send(newSocket, timeString.c_str(), timeString.size(), 0) == SOCKET_ERROR) {std::cerr << "Send failed." << std::endl;closesocket(newSocket);closesocket(serverSocket);WSACleanup();return 1;}std::cout << "Message sent to client: " << timeString;Sleep(1000); // 等待1秒钟}// 关闭套接字closesocket(newSocket);closesocket(serverSocket);WSACleanup();return 0;
}

客户端代码:

#include <iostream>
#include <winsock2.h>
#include <Ws2tcpip.h> // for inet_pton#pragma comment(lib, "Ws2_32.lib")#define PORT 8080
#define SERVER_IP "127.0.0.1"int main() {WSADATA wsaData;SOCKET clientSocket;struct sockaddr_in serverAddr;char buffer[1024] = { 0 };// 初始化 Winsockif (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {std::cerr << "WSAStartup failed." << std::endl;return 1;}// 创建客户端套接字if ((clientSocket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {std::cerr << "Socket creation failed." << std::endl;WSACleanup();return 1;}// 设置服务器地址serverAddr.sin_family = AF_INET;inet_pton(AF_INET, SERVER_IP, &(serverAddr.sin_addr));serverAddr.sin_port = htons(PORT);// 连接到服务器if (connect(clientSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) {std::cerr << "Connect failed." << std::endl;closesocket(clientSocket);WSACleanup();return 1;}std::cout << "Connected to server." << std::endl;// 接收来自服务器的消息int valread;while ((valread = recv(clientSocket, buffer, sizeof(buffer), 0)) > 0) {std::cout << "Message from server: " << buffer << std::endl;memset(buffer, 0, sizeof(buffer)); // 清空缓冲区}if (valread == 0) {std::cout << "Server disconnected." << std::endl;} else {std::cerr << "Recv failed." << std::endl;}// 关闭套接字closesocket(clientSocket);WSACleanup();return 0;
}

这样修改后,服务端每秒钟向客户端发送当前时间,而客户端接收并打印出来。

相关文章:

TCP服务端主动向客户端发送数据

C TCP 服务端和客户端通信的例子 在此基础上&#xff0c;要修改服务端代码&#xff0c;使其能够每秒向客户端发送当前时间&#xff0c;你需要添加一个循环&#xff0c;每次循环发送当前时间给客户端。同时&#xff0c;你需要在客户端代码中添加接收服务端发送的数据的逻辑。 …...

ObjectiveC-03-XCode的使用和基础数据类型

本节做为Objective-C的入门课程&#xff0c;笔者会从零基础开始介绍这种程序设计语言的各个方面。 术语 ObjeC&#xff1a;Objective-C的简称&#xff0c;因为完整的名称过长&#xff0c;后续会经缩写来代替&#xff1b;项目/工程&#xff1a;也称工程&#xff0c;指的是一个A…...

YOLOv9改进策略 :主干优化 | 无需TokenMixer也能达成SOTA性能的极简ViT架构 | CVPR2023 RIFormer

💡💡💡本文改进内容: token mixer被验证能够大幅度提升性能,但典型的token mixer为自注意力机制,推理耗时长,计算代价大,而RIFormers是无需TokenMixer也能达成SOTA性能的极简ViT架构 ,在保证性能的同时足够轻量化。 💡💡💡RIFormerBlock引入到YOLOv9,多个数…...

원클릭으로 주류 전자상거래 플랫폼 상품 상세 데이터 수집 및 접속 시연 예제 (한국어판)

클릭 한 번으로 전자상거래 플랫폼 데이터를 캡처하는 것은 일반적으로 웹 페이지에서 정보를 자동으로 추출 할 수있는 네트워크 파충류 기술과 관련됩니다.그러나 모든 형태의 데이터 수집은 해당 웹 사이트의 사용 약관 및 개인 정보 보호 정책 및 현지 법률 및 규정을 준수…...

2024年github开源top100中文

2024年github开源top100中文 动动美丽的小指头点个赞呗&#xff0c;感谢啦&#xff01;&#x1f495;&#x1f495;&#x1f495;&#x1f618;&#x1f618;&#x1f618; 本文由Butterfly一键发布工具发布 语言star项目名称描述Python45670xai-org/grok-1Grok开源发布Ruby260…...

回收站删除的文件在哪里?专业恢复方法分享(最新版)

“我很想知道我从回收站删除的文件被保存在哪里了呢&#xff1f;我刚刚不小心清空了回收站&#xff0c;现在想将它们恢复&#xff0c;应该怎么操作呢&#xff1f;谁能教教我怎么从回收站恢复文件&#xff1f;” 回收站&#xff0c;作为Windows操作系统中的一个重要组件&#xf…...

什么是工时管理软件?

简而言之&#xff0c;工时管理软件是一种可以帮助管理者跟踪企业员工在项目和任务上花费的时间的软件。然而&#xff0c;工时管理软件不仅是一种收集信息的工具&#xff0c;它还是一种解决方案&#xff0c;使企业能够处理和优化不同的流程和活动&#xff0c;例如工资单、项目预…...

一文解析智慧城市,人工智能技术将成“智”理主要手段

长期以来&#xff0c;有关智慧城市的讨论主要围绕在技术进步方面&#xff0c;如自动化、人工智能、数据的公开以及将更多的传感器嵌入城市以使其更加智能化。实际上&#xff0c;智慧城市是一个关于未来的设想&#xff0c;其重要原因在于城市中存在各种基础设施、政治、地理、财…...

SQLBolt,一个练习SQL的宝藏网站

知乎上有人问学SQL有什么好的网站&#xff0c;这可太多了。 我之前学习SQL买了本SQL学习指南&#xff0c;把语法从头到尾看了个遍&#xff0c;但仅仅是心里有数的程度&#xff0c;后来进公司大量的写代码跑数&#xff0c;才算真真摸透了SQL&#xff0c;知道怎么调优才能最大化…...

TikTok防关联引流系统:全球多账号运营的终极解决方案

tiktok防关联引流系统介绍&#xff0c;tiktok防关联系统是基于tiktok生态研发的效率工具&#xff0c;帮你快速实现tiktok全球多账号运营&#xff0c;系统配备了性能强劲的安卓&#xff0c;防关联智能终端&#xff0c;可一建创建全球多国手机环境&#xff0c;完美满足各类app软件…...

卷积神经网络(CNN)的数学原理解析

文章目录 前言 1、介绍 2、数字图像的数据结构 3、卷积 4、Valid 和 Same 卷积 5、步幅卷积 6、过渡到三维 7、卷积层 8、连接剪枝和参数共享 9、卷积反向传播 10、池化层 11、池化层反向传播 前言 本篇主要分享卷积神经网络&#xff08;CNN&#xff09;的数学原理解析&#xf…...

2024年华为OD机试真题-亲子游戏-Java-OD统一考试(C卷)

题目描述: 宝宝和妈妈参加亲子游戏,在一个二维矩阵(N*N)的格子地图上,宝宝和妈妈抽签决定各自的位置,地图上每个格子有不同的糖果数量,部分格子有障碍物。 游戏规则是妈妈必须在最短的时间(每个单位时间只能走一步)到达宝宝的位置,路上的所有糖果都可以拿走,不能走障…...

大模型显存占用分析

kvcache显存占用分析 假设序列输入长度&#xff1a;s&#xff0c;输出长度&#xff1a;n&#xff0c;数据类型以FP16来保存KV cache。 峰值显存占用&#xff1a;b(sn)hl2*24blh(sn) 注&#xff1a;b表示batch size&#xff0c;第一个2表示k/v cache&#xff0c;第二个2表示FP1…...

matlab中旋转矩阵函数

文章目录 matlab里的旋转矩阵、四元数、欧拉角四元数根据两向量计算向量之间的旋转矩阵和四元数欧拉角转旋转矩阵旋转矩阵转欧拉角旋转矩阵转四元数参考链接 matlab里的旋转矩阵、四元数、欧拉角 旋转矩阵dcmR四元数quatq[q0,q1,q2,q3]欧拉角angle[row,pitch,yaw] % 旋转矩阵…...

探讨Spring Boot的自动配置原理

Spring Boot以其简化Spring应用开发和部署的能力而广受欢迎。其中最引人注目的特性之一就是自动配置&#xff0c;它极大地减少了开发者需要手动编写的配置量。在本篇博客中&#xff0c;我们将深入探讨Spring Boot自动配置的工作原理&#xff0c;以及它是如何使得Spring应用的配…...

【LeetCode】热题100 刷题笔记

文章目录 T1 两数之和T49 字母异位词分组常用小技巧 T1 两数之和 链接&#xff1a;1. 两数之和 题目&#xff1a; 【刷题感悟】这道题用两层for循环也能做出来&#xff0c;但我们还是要挑战一下时间复杂度小于 O ( n 2 ) O(n^2) O(n2)的解法&#xff0c;不能因为它是第一道 …...

基于springboot+vue+Mysql的火车订票管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

C#学习笔记 面试提要

冒泡 for (int m 0; m < arr.Length; m) { for (int n 0; n < arr.Length - 1 - m; n) { if (arr[n] > arr[n1]) { int temp arr[n]; arr[n] arr[n 1]; arr[n1] temp; } } } 选择 for (int m 0; m < arr.Length; m) { int index 0; for (int n 1; n < …...

Linux用户识别与身份验证命令一览

这些命令在系统管理、用户管理和监控工作中扮演着重要的角色。下面&#xff0c;介绍它们的类型及功能描述&#xff1a; 一、系统信息命令 hostname&#xff1a;此命令用于显示系统的主机名&#xff0c;它代表了系统在网络中的唯一标识。hostname -f&#xff1a;此命令进一步展…...

【Linux】GCC编译器(七)

文章目录 初步了解安装 GCC编译第一个程序编译选项 初步了解 GCC是GNU Compiler Collection的缩写&#xff0c;是一个由GNU项目开发的编译器集合。 GCC的历史和发展&#xff1a;GCC最初由理查德斯托曼&#xff08;Richard Stallman&#xff09;发起&#xff0c;目的是创建一个…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

土建施工员考试:建筑施工技术重点知识有哪些?

《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目&#xff0c;核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容&#xff0c;附学习方向和应试技巧&#xff1a; 一、施工组织与进度管理 核心目标&#xff1a; 规…...

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...