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

TCP收发信息(C++)

目录

一、介绍

二、收数据

三、发数据


 

一、介绍

tcp和udp的区别之一,即tcp是有连接的,udp是无连接的,udp收发数据的代码可以独立运行,tcp发数据前必须确保收数据的一方是打开的,否则无法建立连接。

二、收数据

tcpRecv.h

#pragma once
#include<iostream>
#include<winsock.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;class tcpRecv
{
public:tcpRecv();~tcpRecv();void initialization();void recvData();
public://定义发送缓冲区和接受缓冲区char send_buf[100];char recv_buf[100];//定义服务端套接字,接受请求套接字SOCKET s_server;SOCKET s_accept;//服务端地址客户端地址SOCKADDR_IN server_addr;SOCKADDR_IN accept_addr;
};

 tcpRecv.cpp

#include "tcpRecv.h"tcpRecv::tcpRecv()
{initialization();//填充服务端信息server_addr.sin_family = AF_INET;server_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);server_addr.sin_port = htons(14555);//创建套接字s_server = socket(AF_INET, SOCK_STREAM, 0);if (bind(s_server, (SOCKADDR *)&server_addr, sizeof(SOCKADDR)) == SOCKET_ERROR) {cout << "套接字绑定失败!" << endl;WSACleanup();}else {cout << "套接字绑定成功!" << endl;}//设置套接字为监听状态if (listen(s_server, SOMAXCONN) < 0) {cout << "设置监听状态失败!" << endl;WSACleanup();}else {cout << "设置监听状态成功!" << endl;}cout << "服务端正在监听连接,请稍候...." << endl;//接受连接请求int len = sizeof(SOCKADDR);s_accept = accept(s_server, (SOCKADDR *)&accept_addr, &len);if (s_accept == SOCKET_ERROR) {cout << "连接失败!" << endl;WSACleanup();}cout << "连接建立,准备接受数据" << endl;
}tcpRecv::~tcpRecv()
{//关闭套接字closesocket(s_server);closesocket(s_accept);//释放DLL资源WSACleanup();
}void tcpRecv::initialization() {//初始化套接字库WORD w_req = MAKEWORD(2, 2);//版本号WSADATA wsadata;int err;err = WSAStartup(w_req, &wsadata);if (err != 0) {cout << "初始化套接字库失败!" << endl;}else {cout << "初始化套接字库成功!" << endl;}//检测版本号if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wHighVersion) != 2) {cout << "套接字库版本号不符!" << endl;WSACleanup();}else {cout << "套接字库版本正确!" << endl;}//填充服务端地址信息}void tcpRecv::recvData() {//接收数据int recv_len = recv(s_accept, recv_buf, 100, 0);if (recv_len < 0) {cout << "接受失败!" << endl;}else {cout << "接收信息为:" << recv_buf << endl;}
}

 main.cpp

#include "tcpRecv.h"int main() {tcpRecv tcp;while (1) {tcp.recvData();}return 0;
}

三、发数据

tcpSend.h

#pragma once
#include<iostream>
#include<string>
#include<winsock.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;class tcpSend
{
public:tcpSend();~tcpSend();void initialization();void sendData(std::string&data);
public://定义服务端套接字,接受请求套接字SOCKET s_server;//服务端地址客户端地址SOCKADDR_IN server_addr;
};

 tcpSend.cpp

#include "tcpSend.h"tcpSend::tcpSend()
{initialization();//填充服务端信息server_addr.sin_family = AF_INET;server_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");server_addr.sin_port = htons(14555);//创建套接字s_server = socket(AF_INET, SOCK_STREAM, 0);if (connect(s_server, (SOCKADDR *)&server_addr, sizeof(SOCKADDR)) == SOCKET_ERROR) {cout << "服务器连接失败!" << endl;WSACleanup();}else {cout << "服务器连接成功!" << endl;}
}tcpSend::~tcpSend()
{//关闭套接字closesocket(s_server);//释放DLL资源WSACleanup();
}void tcpSend::initialization() {//初始化套接字库WORD w_req = MAKEWORD(2, 2);//版本号WSADATA wsadata;int err;err = WSAStartup(w_req, &wsadata);if (err != 0) {cout << "初始化套接字库失败!" << endl;}else {cout << "初始化套接字库成功!" << endl;}//检测版本号if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wHighVersion) != 2) {cout << "套接字库版本号不符!" << endl;WSACleanup();}else {cout << "套接字库版本正确!" << endl;}//填充服务端地址信息}void tcpSend::sendData(std::string&data) {int send_len = send(s_server, data.c_str(), sizeof(data), 0);if (send_len < 0) {cout << "发送失败!" << endl;}else {std::cout << "send data:" << data.c_str() << std::endl;}}

 main.cpp

#include "tcpSend.h"int main() {tcpSend tcp;for (int i = 0; i < 100; i++) {std::string s = "test " + std::to_string(i);tcp.sendData(s);Sleep(1000);}return 0;
}

 

相关文章:

TCP收发信息(C++)

目录 一、介绍 二、收数据 三、发数据 一、介绍 tcp和udp的区别之一&#xff0c;即tcp是有连接的&#xff0c;udp是无连接的&#xff0c;udp收发数据的代码可以独立运行&#xff0c;tcp发数据前必须确保收数据的一方是打开的&#xff0c;否则无法建立连接。 二、收数据 tc…...

windows Socket简单编程实例

服务端 #include <winsock2.h> #include <string.h> #include <stdio.h> #include <stdlib.h>#pragma comment(lib, "Ws2_32.lib")void error_handing(const char* message) {fputs(message, stderr);fputc(\n, stderr);exit(1); } int mai…...

外企开展中国在线业务的三种网络加速方案:含免ICP备案CDN解决方案

中国作为全球除美国外最大的消费市场&#xff0c;是几乎每个国际化企业都想要深入挖掘的市场&#xff0c;但外国企业在中国开展在线业务需要面临一个比较特殊的挑战&#xff1a;互联网防火墙&#xff08;GFW&#xff09;。为此所有想要在中国市场有所作为的外企都需要首先解决这…...

室内UWB定位到达角(AOA)测量精度的提高

抽象的 本文表明,用于在视线 (LoS) 中定位标签的干涉定位系统的方位角测量精度可以通过利用脉冲无线电超宽带 (IR-UWB) 信号来提高,并且无需增加频率带宽。该解决方案采用相位相关 (PC) 方法,最初应用于连续波 (CW) 信号,后来适用于超宽带 (UWB) 脉冲信号。将获得的结果与…...

“深入理解JVM:探索Java虚拟机的内部工作原理“

标题&#xff1a;深入理解JVM&#xff1a;探索Java虚拟机的内部工作原理 摘要&#xff1a;本文将深入探索Java虚拟机&#xff08;JVM&#xff09;的内部工作原理&#xff0c;包括JVM的架构、类加载、内存管理、垃圾回收机制等方面。通过理解JVM的内部工作原理&#xff0c;我们…...

TC3XX - MCAL知识点(三十一):FlsLoader MCAL配置及代码实战

目录 1、概述 2、MCAL配置 2.1、FlsLoaderGeneral 2.2、FlsLoaderOptionalApi 2.3、FlsLoaderPFlash0ProtConfig 3、测试代码及结果 3.1、测试代码 3.1.1、初始化 3....

Yii2 mongodb分组查询

$data MongoDbModelName::getCollection()->aggregate([[$group > [_id > $user_id, //通过user_id分组去重total > [$sum > 1]],],[$match > [total > [$gt > 1]]]],[allowDiskUse > true]);相当于 select user_id,count(1) as total from Mongo…...

Springboot的多种部署方式和Linux具体的 service 操作介绍

前言 Springboot 内置了 tomcat&#xff0c;部署十分的方便&#xff0c;无需额外的应用服务器。但是在部署过程中&#xff0c;却有很多种方式 本文总结在工作中常见的 linux 部署方式 一、通过nohup命令部署 linux 可以通过 nohup 命令将项目部署在后台&#xff0c;即使终端…...

【EI/SCOPUS检索】2023年第二届光学成像与测量国际会议 (ICOIM2023)

2023年第二届光学成像与量国际会议 &#xff08;ICOIM2023&#xff09; 2023 2nd International Conference on Optical Imaging and Measurement 光学成像与测量密切相关且具有广泛的应用&#xff0c;如显微镜、望远镜、传感器等。通常&#xff0c;成像是测量的基础&#xf…...

6 个简单步骤,教你创建可视化看板工作流

看板是一种相当流行的工作管理工具&#xff0c;团队和组织使用它来可视化工作流程&#xff0c;限制当前正在进行的工作&#xff0c;并最大限度地提高流程效率。 看板的一些主要特点包括&#xff1a; ✓ 看板提供了对工作流程进行可视化控制的手段&#xff1b; ✓ 看板 "…...

时间相减 示例kotlin LocalDateTime

时间相减 示例kotlin LocalDateTime fun test1(){val d1: LocalDateTime LocalDateTime.parse("2023-05-06 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))val d2: LocalDateTime LocalDateTime.parse("2023-05-07 15:12:00"…...

Boost开发指南-4.5swap

swap boost::swap是对标准库里的std::swap 的增强和泛化&#xff0c;为交换两个变量&#xff08;可以是int等内置数据类型&#xff0c;或者是类实例、容器&#xff09;的值提供了便捷的方法。 为了使用boost::swap&#xff0c;需要包含头文件<boost/swap.hpp>&#xff…...

OpenStack对接Ceph平台

OpenStack对接Ceph平台 目录 OpenStack对接Ceph平台 1、创建后端需要的存储池(ceph-01节点操作)2、创建后端用户 2.1 创建密钥(ceph-01节点操作) 2.1.1 创建用户client.cinder2.1.2 创建用户client.glance2.1.3 创建用户client.cinder-backup2.2 导出密钥(ceph-01节点操作)2.3 …...

【Vue2】动态组件的使用-切换组件和keep-alive,以及异步组件

目录 想实现切换不同列表展示不同数据方法一方法二&#xff0c;动态组件动态组件的父组件如何传的值动态组件的子组件如何接受传的值 认识keep-alive缓存组件的生命周期 异步组件&#xff0c;单独打包&#xff0c;实现webpack分包&#xff0c;如何对组件进行单独打包&#xff0…...

C++的IO流

目录 C语言的输入与输出 流是什么 CIO流 C标准IO流 C文件IO流 stringstream的简单介绍 在C语言中&#xff0c;如果想要将一个整形变量的数据转化为字符串格式&#xff0c;如何去做&#xff1f; 将数值类型数据格式化为字符串 字符串拼接 序列化和反序列化结构数据 注…...

nodejs+vue+elementui电影订票网站系统_wqc3k

电影订票系统在国内有很多值得借鉴的例子&#xff0c;功能也都趋于完善&#xff0c;因此此次电影订票系统将轻量化开发&#xff0c;要完成以下功能&#xff1a; &#xff08;1&#xff09;要支持完整的用户注册&#xff0c;登录功能&#xff0c;账号的管理通过管理员来实现。 &…...

2023-08-14 linux 串口终端输入长命令不换行,覆盖前面内容,stty命令设置串口终端行列数

一、linux 串口终端输入长命令不换行&#xff0c;覆盖前面内容&#xff0c;现象如下图&#xff1a; 二、解决方法&#xff1a;用stty 命令设置行列数 stty columns 200 stty rows 10三、参考文章 https://www.cnblogs.com/goloving/p/15170537.html 常用Linux串口设备操作命…...

根据指定日期获取周,月,季度,年的第一天和最后一天

1. 根据指定日期获取周&#xff0c;月&#xff0c;季度&#xff0c;年的第一天和最后一天 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date;/*** 根据给定时间获取周、月度、季度、年度开始结束时间*…...

CRMEB商城系统:便捷、安全、多样化的购物方式

商城系统是当今社会商业发展的重要组成部分&#xff0c;它以数字化、网络化的方式提供商品和服务。商城系统通过互联网技术&#xff0c;将商品和消费者紧密连接&#xff0c;方便了购物的流程和效率。 商城系统的特点之一是无国界化。传统实体商店通常受限于地理位置和时间&…...

同步_异步请求和Ajax并利用axios框架简化

目录 同步和异步 原生的Ajax 创建XMLHttpRequest对象 常用方法 常用属性 axios框架 同步和异步 同步请求&#xff1a;发送请求后&#xff0c;会做出回应&#xff0c;回应的内容会覆盖浏览器中的内容&#xff0c;这样会打断其他正常的操作&#xff0c;显得不太友好&#…...

抖音批量下载工具:智能反爬与分布式任务调度的技术突破

抖音批量下载工具&#xff1a;智能反爬与分布式任务调度的技术突破 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…...

FreeRTOS实战指南:从定时器、中断到系统调优的进阶之路

1. FreeRTOS定时器实战&#xff1a;从基础到高级应用 在嵌入式系统中&#xff0c;定时器是实现精确时序控制的核心组件。FreeRTOS提供的软件定时器功能&#xff0c;比硬件定时器更加灵活易用。我曾在智能家居项目中用FreeRTOS定时器实现过温湿度传感器的周期性采集&#xff0c…...

BetterNCM Installer:让网易云音乐插件安装化繁为简的利器

BetterNCM Installer&#xff1a;让网易云音乐插件安装化繁为简的利器 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 你是否曾因复杂的插件安装流程望而却步&#xff1f;是否在面对命…...

零基础鸿蒙应用开发第二十二节:类的继承与多态入门

【学习目标】 理解继承的核心意义&#xff0c;掌握ArkTS中extends关键字的使用规则&#xff0c;区分“单继承”特性在鸿蒙开发中的适配场景&#xff1b;掌握super关键字的核心作用&#xff08;调用父类构造函数、调用父类方法&#xff09;&#xff0c;规避继承中的常见语法错误…...

notepad-- Markdown实时预览功能高效使用全攻略

notepad-- Markdown实时预览功能高效使用全攻略 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器&#xff0c;目标是做中国人自己的编辑器&#xff0c;来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- 作为一款支持Windows、…...

华为OD机考双机位C卷 - 数字游戏 (Java)

# 数字游戏 2026华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 华为OD机试双机位C卷真题目录(Java)点击查看: 【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(Java题解) 题目描述 小明玩一个游戏。 系统发1+n张牌,每张牌上有一个整数。 第一张给…...

tao-8k嵌入模型实测:Xinference免配置部署,长文本处理效率翻倍

tao-8k嵌入模型实测&#xff1a;Xinference免配置部署&#xff0c;长文本处理效率翻倍 1. 引言&#xff1a;长文本嵌入的工程挑战 在自然语言处理领域&#xff0c;文本嵌入模型扮演着至关重要的角色。它们将文本转换为高维向量表示&#xff0c;为语义搜索、文档聚类、问答系统…...

Element-UI表格避坑指南:修改展开图标+整行点击+智能隐藏,这些细节你知道吗?

Element-UI表格交互优化实战&#xff1a;图标定制与智能展开的进阶技巧 第一次使用Element-UI的Table组件时&#xff0c;我对着文档折腾了半天才让展开功能正常工作。但当我看到默认的小箭头图标时&#xff0c;总觉得和产品设计风格格格不入&#xff1b;点击展开区域太小导致用…...

不花一分钱!用闲置电脑搭建永久Mac远程控制台(VNC+cpolar固定TCP教程)

零成本打造24小时在线的Mac远程开发环境 你是否有一台闲置的Mac电脑放在角落积灰&#xff1f;或者需要随时随地访问家里的开发环境&#xff1f;将旧Mac改造成全天候在线的远程工作站&#xff0c;不仅能充分利用闲置资源&#xff0c;还能为移动办公提供极大便利。本文将手把手教…...

探索固定翼无人机编队控制:从高效协同到PX4-Autopilot落地实践

探索固定翼无人机编队控制&#xff1a;从高效协同到PX4-Autopilot落地实践 【免费下载链接】PX4-Autopilot PX4 Autopilot Software 项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot PX4-Autopilot作为开源无人机飞控系统的核心框架&#xff0c;通过模块化设…...