4. C++网络编程-TCP客户端的实现

TCP Client网络编程基本步骤

  • 创建socket,指定使用TCP协议
  • 使用connect连接服务器
  • 使用recv/send接收/发送数据关闭socket

在这里插入图片描述

TCP-connect连接请求

!man 2 connect
在这里插入图片描述

#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
功能:给服务器发送客户端的连接请求
参数:sockfd:文件描述符,socket函数的返回值addr:要连接的服务器的网络信息结构体(需要自己设置)addrlen:add的长度
返回值:成功:0失败:-1

注意:
connect建立连接之后不会产生新的套接字
连接成功后才可以开始传输TCP数据
头文件:#include

代码实现

#include <stdio.h>
#include <cstring>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <iostream>
#include <arpa/inet.h>
#define PORT 8888
#define MESSAGE_LEN 1024int main(int argc,char* argv[]){int ret=-1;int socket_fd;struct sockaddr_in serveraddr;char sendbuf[MESSAGE_LEN]={0,};char recvbuf[MESSAGE_LEN]={0,};socket_fd=socket(AF_INET,SOCK_STREAM,0);if(socket_fd<0){std::cout<<"Failed to create socket!"<<std::endl;exit(-1);}serveraddr.sin_family=AF_INET;//地址族serveraddr.sin_port=htons(PORT);//端口号serveraddr.sin_addr.s_addr=inet_addr("127.0.0.1");//这里将字符串转换成整型ret=connect(socket_fd,(struct sockaddr *)&serveraddr,sizeof(sockaddr));if(ret < 0){std::cout<<"Failed to connect server!"<<std::endl;exit(-1);}std::cout<<"connect success!"<<std::endl;while(1){memset(sendbuf,0,MESSAGE_LEN);fgets(sendbuf,sizeof(sendbuf),stdin);//输入ret = send(socket_fd,sendbuf,strlen(sendbuf),0);//发送if(ret <= 0){std::cout<<"Failed to send data!"<<std::endl;break;}if(strcmp(sendbuf,"quit")==0){break;}ret = recv(socket_fd,recvbuf,MESSAGE_LEN,0);//接收数据recvbuf[ret]='\0';std::cout<<"recv:"<<recvbuf<<std::endl;//输出}close(socket_fd);return 0;
}

在这里插入图片描述

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

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

相关文章

邦芒简历:简历照片的艺术与真实

在美颜滤镜与P图技术盛行的今天&#xff0c;许多人似乎对“完美”形象有着不懈的追求。从社交平台的自拍&#xff0c;到简历上的证件照&#xff0c;无一不经过精心的修饰与处理。然而&#xff0c;这种对完美的追求在求职过程中&#xff0c;是否总是起到积极的作用呢&#xff1f…

内网渗透(不出网上线CS)

目录 CS的概述 实验&#xff1a;不出网上线CS实验 一&#xff1a;给PC1种马 二&#xff1a;使用Beacon SMB去控制PC2。 三&#xff1a;将CS权限传递给MSF 四&#xff1a;将msf权限传递给CS CS的概述 cs是一款强大的控制windows木马的工具。是目前渗透中常使用的一个工具…

一些Spring Boot直接的解释

RequestParam() 就是从问号之后的键值对获取值绑定值,这个方法用的是get方法 /fjg?namefjg http://example.com/find?productId1234GetMapping("/find") public String getProduct(RequestParam("productId") String productId) {return "Product …

fastapi中实现多个路由请求

大家伙&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 前言 最近在写机器人相关的接口&#xff0c;顺手学了学python&#xff0c;发现这是个好东西&#xff0c;写代码效率比java要高很多&#xff0c;比如写个词云呀&#xff0c;写个回调呀&am…

随手笔记4

1、https://www.pgyer.com/app/distribution 蒲公英 移动发布二维码

gRPC和ProtoBuf

gRPC介绍 gRPC是一个高性能、开源且通用的RPC框架&#xff0c;它基于HTTP/2标准协议和Protocol Buffers进行数据序列化&#xff0c;支持多种编程语言。 rpc和http区别 传输协议&#xff1a;RPC可以基于TCP或HTTP协议&#xff0c;而HTTP服务则工作在HTTP协议之上。效率和性能…

android 问题记录:gradle.kts文件引入本地jar包

在build.gradle文件中引入本地的jar文件&#xff0c;可以使用files方法来添加本地的jar文件到项目的依赖中。在build.gradle引入jar包我们都很熟悉了&#xff0c;具体代码如下 implementation files(libs/test.jar)// 或者 compile files(libs/test.jar) 但是这种写法目前在kt…

kafka 消费模式基础架构

kafka 消费模式 &基础架构 目录概述需求&#xff1a; 设计思路实现思路分析1.kafka 消费模式基础架构基础架构2&#xff1a; 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,…

mainwindow.ui和mainwindow.h和ui_mainwindow.h这几个文件之间的联系是什么

在Qt应用程序开发中&#xff0c;mainwindow.ui, mainwindow.h, 和 ui_mainwindow.h 这三个文件之间有着紧密的联系&#xff0c;共同构成了使用Qt Designer设计的图形用户界面&#xff08;GUI&#xff09;应用程序的基础。下面是这三个文件各自的作用及它们之间的关联&#xff1…

HTML5 文件处理及应用

HTML5 文件处理及应用 目录 核心对象文件信息读取文件拖放FileReaderSyncFileWriter APIBlob URL与 revokeObjectURL()跨源资源共享 (CORS)HTML5文件File API为浏览器提供了与用户计算机上的文件进行交互的能力,使得Web应用程序能够在客户端直接处理文件数据,而无需依赖服务…

Golang:使用jszwec/csvutil读取csv文件

jszwec/csvutil 高性能、惯用的CSV记录编码和解码到本机Go结构 文档 https://github.com/jszwec/csvutil 安装 go get github.com/jszwec/csvutil要读取的文件 user.csv name,age,CreatedAt jacek,26,2012-04-01T15:00:00Z john,,2001-01-01T00:00:00Z读取示例 package m…

93.网络游戏逆向分析与漏洞攻防-游戏技能系统分析-增强技能信息显示后进行分析

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

Ant Design Vue中 a-table 嵌套子表格

需求&#xff1a;在父表格中嵌套子表格&#xff0c;当点击展开某一行时&#xff0c;有展开的关闭当前展开行。使用a-table中的expandedRowKeys 属性和expand 方法。链接&#xff1a;Ant Design Vue 一、属性说明&#xff1a; expandedRowKeys&#xff1a;这个主要是控制展开某行…

都2024年了!是谁还不会优化 Hive 的小文件啊!!!速看!

文章目录 小文件产生的原因1.查询建表或者插入2.装载数据3.动态分区小文件影响解决方法针对已经存在的小文件进行优化1.小文件归档2.getmerge3.concatenate4.重写针对写入数据时的优化1.调参优化2.动态分区优化3.使用 Spark 算子控制小文件数量查看 HDFS 上的文件时,无意间点进…

【QT+VS】如何在现有VS项目中添加Qt界面?【全网最详细】

0. 前置步骤 参考如下链接文章中的 前3个步骤(1:下载Qt;2:安装Qt;3:安装Qt插件),完成环境的配置和安装。 深耕AI:如何联合Qt,VS,C++,来开发一个电脑版软件(简单有趣,详细) 本文的基础项目链接为: c++工程+图像分割预测+mmdet+实例分割+最新工程+简洁易懂+新手…

搭建自己的视频通话服务器Janus(WebRTC)

1. 安装janus apt install janus 高版本的Ubuntu已经可以直接安装了&#xff0c;不要编译那么麻烦了 2. 安装nginx janus 是后端&#xff0c;需要nginx或者其他等提供前端页面的服务器&#xff0c;此外因为这里并没有正式的证书&#xff0c;只能用自签名的证书用于https。 …

Mac 更改登陆密码,不是appleid 密码

在Mac 上更改登录密码 在Mac 上&#xff0c;选取苹果菜单 >“系统设置”&#xff0c;然后点按边栏中的“用户与群组” 。 … 点按右侧用户名旁边的“简介”按钮 。 点按“更改”。 在“旧密码”栏输入你的当前密码。 在“新密码”栏中输入新密码&#xff0c;然后在“确认密码…

「数据结构」队列

目录 队列的基本概念 队列的实现 头文件queue.h 实现函数接口 1.初始化和销毁 2.出队列和入队列 3.获取队头元素和队尾元素 4.队列长度判空 后记 前言 欢迎大家来到小鸥的博客~ 个人主页&#xff1a;海盗猫鸥 本篇专题&#xff1a;数据结构 多谢大家的支持啦&#xff…

Java入门基础学习笔记36——面向对象基础

面向对象编程快速入门&#xff1a; 计算机是用来处理数据的。 单个变量 数组变量 对象数据 Student类&#xff1a; package cn.ensource.object;public class Student {String name;double chinese_score;double math_score;public void printTotalScore() {System.out.pr…

【哈希】Leetcode 219. 存在重复元素 II【简单】

存在重复元素 II 给你一个整数数组 nums 和一个整数 k &#xff0c;判断数组中是否存在两个 不同的索引 i 和 j &#xff0c;满足 nums[i] nums[j] 且 abs(i - j) < k 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输…