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

TCP通信实现(服务端与客户端)

TCP通信实现(服务器端)

案例
// TCP 通信的服务器端#include <stdio.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>int main() {// 1.创建socket(用于监听的套接字)int lfd = socket(AF_INET, SOCK_STREAM, 0);if(lfd == -1) {perror("socket");exit(-1);}// 2.绑定#include <netinet/in.h>
// struct sockaddr_in
// {
// sa_family_t sin_family; /* __SOCKADDR_COMMON(sin_) */
// in_port_t sin_port; /* Port number. */
// struct in_addr sin_addr; /* Internet address. */
// /* Pad to size of `struct sockaddr'. */
// unsigned char sin_zero[sizeof (struct sockaddr) - __SOCKADDR_COMMON_SIZE -
// sizeof (in_port_t) - sizeof (struct in_addr)];
// };
// struct in_addr
// {
// 	in_addr_t s_addr;
// };struct sockaddr_in saddr;saddr.sin_family = AF_INET;// inet_pton(AF_INET, "192.168.193.128", saddr.sin_addr.s_addr);saddr.sin_addr.s_addr = INADDR_ANY;  // 0.0.0.0 表示任意地址,计算机有多个网卡,每个网卡ip地址可能都不一样。只有服务端可以这样写saddr.sin_port = htons(9999);//将一个短整型数从主机字节序转换到网络字节序。int ret = bind(lfd, (struct sockaddr *)&saddr, sizeof(saddr));if(ret == -1) {perror("bind");exit(-1);}// 3.监听ret = listen(lfd, 8);if(ret == -1) {perror("listen");exit(-1);}// 4.接收客户端连接struct sockaddr_in clientaddr;int len = sizeof(clientaddr);//是一个阻塞的函数 int cfd = accept(lfd, (struct sockaddr *)&clientaddr, &len);if(cfd == -1) {perror("accept");exit(-1);}// 输出客户端的信息char clientIP[16];inet_ntop(AF_INET, &clientaddr.sin_addr.s_addr, clientIP, sizeof(clientIP));//网络字节序转主机字节序。ip地址转换unsigned short clientPort = ntohs(clientaddr.sin_port);//网络字节序转主机字节序,端口号转换printf("client ip is %s, port is %d\n", clientIP, clientPort);// 5.通信char recvBuf[1024] = {0};while(1) {// 获取客户端的数据int num = read(cfd, recvBuf, sizeof(recvBuf));if(num == -1) {perror("read");exit(-1);} else if(num > 0) {printf("recv client data : %s\n", recvBuf);} else if(num == 0) {// 表示客户端断开连接printf("clinet closed...");break;}char * data = "hello,i am server";// 给客户端发送数据write(cfd, data, strlen(data));}// 关闭文件描述符close(cfd);close(lfd);return 0;
}

TCP通信实现(客户端)

案例
// TCP通信的客户端#include <stdio.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>int main() {// 1.创建套接字int fd = socket(AF_INET, SOCK_STREAM, 0);if(fd == -1) {perror("socket");exit(-1);}// 2.连接服务器端struct sockaddr_in serveraddr;serveraddr.sin_family = AF_INET;inet_pton(AF_INET, "192.168.128.128", &serveraddr.sin_addr.s_addr);serveraddr.sin_port = htons(9999);int ret = connect(fd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));if(ret == -1) {perror("connect");exit(-1);}// 3. 通信char recvBuf[1024] = {0};while(1) {char * data = "hello,i am client";// 给客户端发送数据write(fd, data , strlen(data));sleep(1);int len = read(fd, recvBuf, sizeof(recvBuf));if(len == -1) {perror("read");exit(-1);} else if(len > 0) {printf("recv server data : %s\n", recvBuf);} else if(len == 0) {// 表示服务器端断开连接printf("server closed...");break;}}// 关闭连接close(fd);return 0;
}
daic@daic:~/Linux/linuxwebserver/part04networkProgramming/lesson32$ ./client 
recv server data : hello,i am server
recv server data : hello,i am server
recv server data : hello,i am server
recv server data : hello,i am server
recv server data : hello,i am server
recv server data : hello,i am server
daic@daic:~/Linux/linuxwebserver/part04networkProgramming/lesson32$ ./server 
client ip is 192.168.128.128, port is 54410
recv client data : hello,i am client
recv client data : hello,i am client
recv client data : hello,i am client
recv client data : hello,i am client
recv client data : hello,i am client
recv client data : hello,i am client
recv client data : hello,i am client
recv client data : hello,i am client
recv client data : hello,i am client

相关文章:

TCP通信实现(服务端与客户端)

TCP通信实现&#xff08;服务器端) 案例 // TCP 通信的服务器端#include <stdio.h> #include <arpa/inet.h> #include <unistd.h> #include <string.h> #include <stdlib.h>int main() {// 1.创建socket(用于监听的套接字)int lfd socket(AF_…...

安装appium自动化测试环境,我自己的版本信息

教程来自&#xff1a;Appium原理与安装 - 白月黑羽 我的软件的版本&#xff1a; 安装是选择为自己安装而不是选all user pip install appium-python-client命令在项目根目录下安装appium-python-client sdk的话最简单的安装方式就是去Android官网下一个android studio然后在…...

【讲解下Web前端三大主流的框架】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

视频监控平台AS-V1000产品介绍:账户或用户数据的导入和导出功能介绍

目录 一、功能描述 &#xff08;一&#xff09;导入功能定义 &#xff08;二&#xff09;导出功能定义 二、用户数据的导入导出的作用 三、AS-V1000新版本的导出和导入功能介绍 &#xff08;一&#xff09;功能主界面 &#xff08;二&#xff09;导出功能 1、导出操作 …...

markdown画时序图的时候,如何自动显示每一条时序的序号

1: 现象描述 今天画时序图的时候&#xff0c;发现时序上面没有显示序号&#xff0c;看起来不够清晰&#xff0c;只有单纯的说明; 如下图所示 刚测试CSDN的时序图&#xff0c;默认是带序号的&#xff0c;看起来和实际使用的markdown工具有关系&#xff1b; 2&#xff1a;解决办…...

朴素贝叶斯

经典三门问题 问题 一种说法(直觉派) 另一种说法(贝叶斯派) 注意P(B)1, 已经知道路人抽中的就是绿豆 三门问题在网上争端比较大,分为直觉派和贝叶斯派,最后一个程序员出来写程序跑了一遍,发现就是贝叶斯派 朴素贝叶斯的直观理解 在X的条件下分别等于0~9的概率 注意之前我们讲的…...

【软件设计师】——10.面向对象技术

目录 10.1 基本概念 10.2设计原则 10.3 设计模式的概念与分类 10.4 创建型模式 10.4.1 Singleton 单例模式 10.4.2 Builder 构建器模式 10.4.3 Abstract Factory 抽象工厂模式 10.4.4 Prototype原型模式 10.4.5 Factory Method工厂方法模式 10.5 结构型模式 10.5.1 A…...

唐山无人机航拍,唐山无人机建模,唐山数据孪生

随着数字经济发展&#xff0c;各地逐渐兴起了无人机低空经济&#xff1b;尤其是无人机航拍&#xff0c;无人机建模&#xff1b;目前技术很成熟&#xff1b;比如水利部提出的数字孪生&#xff0c;四预的实现&#xff0c;都要通过无人机采集底层数据&#xff1b; 目前无人机建模…...

vue中分页查询的实现

在 Vue 中实现分页查询可以提升大型数据集的加载和显示效率。本文将逐步介绍如何使用 Vuex 状态管理和 axios HTTP 请求库来实现 Vue 分页查询。 1. 在 Vuex 中创建分页状态 首先&#xff0c;在 Vuex 状态管理中创建分页状态&#xff0c;该状态将存储每页的记录数、当前页码和…...

类 和 对象(二)

构造方法 接上篇&#xff0c;若每次都想下面的setDate方法给对象初始化&#xff0c;未免比较麻烦&#xff0c;那有什么方法可以让初始化更加简便呢&#xff1f; public void setDate(int year, int month, int day){this.year year;this.month month;this.day day;}答&#…...

buu[HCTF 2018]WarmUp(代码审计)

buu[HCTF 2018]WarmUp&#xff08;代码审计&#xff09; 题目 访问source.php <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist ["source">"source.php","hint">"hint.php…...

力扣爆刷第145天之图论五连刷(dfs和bfs)

力扣爆刷第145天之图论五连刷&#xff08;dfs和bfs&#xff09; 文章目录 力扣爆刷第145天之图论五连刷&#xff08;dfs和bfs&#xff09;总结一、797. 所有可能的路径二、200. 岛屿数量三、695. 岛屿的最大面积四、1020. 飞地的数量五、130. 被围绕的区域 总结 dfs是一条路走…...

Host头攻击-使用加密和身份验证机制

使用加密和身份验证机制&#xff0c;即安装合适的安全工具和软件&#xff0c;是确保Web服务器安全性的重要步骤。这种方法涉及使用各种安全工具来检测、预防、监控和响应潜在的安全威胁。以下是对第6种方法的详细讲解&#xff0c;包括一些常见的安全工具和软件的示例。 1. 防火…...

衍生品赛道的 UniSwap:SynFutures 或将成为行业领军者

经过一个周期的发展&#xff0c;DeFi 已经成为基于区块链构建的最成功的去中心化应用&#xff0c;并彻底改变了加密市场的格局。加密货币交易开始逐步从链下转移到链上&#xff0c;并从最初简单的 Swap 到涵盖借贷、Staking、衍生品交易等广泛的生态系统。 在 DeFi 领域&#x…...

TypeScript中的`let`、`const`、`var`区别:变量声明的规范与实践

TypeScript中的let、const、var区别&#xff1a;变量声明的规范与实践 引言 在TypeScript中&#xff0c;变量声明是代码编写的基础部分。let、const、var 是三种用于变量声明的关键字&#xff0c;它们各自有不同的作用域规则和可变性特点。 基础知识 作用域&#xff1a;变量…...

【python】python商家会员数据分析可视化(源码+数据集+课程报告论文)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…...

Python限制输入的数范围

在Python中&#xff0c;我们可以使用多种方法来限制用户输入的数值范围。 1.使用while循环和try-except语句的方法 以下是一个使用while循环和try-except语句的示例&#xff0c;该示例将要求用户输入一个在指定范围内的整数。 假设我们要限制用户输入的数在1到100之间&#…...

postman都有哪些功能?

接口测试 可以方便地发送 HTTP 请求&#xff0c;包括各种方法&#xff08;GET、POST、PUT、DELETE 等&#xff09;&#xff0c;并查看响应结果。 参数设置 能够灵活设置请求的参数&#xff0c;如查询参数、请求头、请求体等。 环境管理 支持创建不同的环境&#xff0c;方便…...

华为ensp中USG6000V防火墙双机热备VRRP+HRP原理及配置

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年5月6日20点26分 &#x1f4af;趣站推荐&#x1f4af; 前些天发现了一个巨牛的&#x1f916;人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍…...

ROS for LabVIEW:实现LabVIEW与ROS的无缝集成

ROS for LabVIEW是由Tufts大学开发的一套VI集合&#xff0c;旨在实现LabVIEW与ROS&#xff08;Robot Operating System&#xff09;的无缝集成。ROS是一个灵活的机器人软件框架&#xff0c;而LabVIEW则是一种强大的图形化编程工具。这个工具包的推出使得LabVIEW用户能够直接与R…...

Meet Composer:基于控制原语的分层可控文生图架构

1. 项目概述&#xff1a;Meet Composer不是又一个“画图玩具”&#xff0c;而是控制力重构的起点最近在整理一批国产多模态模型的技术简报时&#xff0c;Meet Composer这个名字反复跳出来——不是因为它的宣传声量最大&#xff0c;而是因为它在技术文档里反复强调一个被多数人忽…...

AGENTS半自主智能体架构:状态驱动的可追溯可恢复Agent系统

1. 项目概述&#xff1a;这不是又一个“Agent框架”&#xff0c;而是一次LLM应用范式的重新校准“Inside AGENTS”这个标题里藏着三个关键信号&#xff1a;Inside——它不是教你怎么用&#xff0c;而是带你钻进引擎舱看活塞怎么运动&#xff1b;AGENTS——大写的复数&#xff0…...

3步快速清理Windows驱动存储:DriverStore Explorer终极使用指南

3步快速清理Windows驱动存储&#xff1a;DriverStore Explorer终极使用指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否发现Windows系统盘空间不断减少&#xff0c;却找不到原…...

保姆级教程:5分钟快速搭建你的DNC服务器,实现Fanuc/西门子数控程序远程传输与管理

数控机床程序远程管理实战&#xff1a;5分钟构建企业级DNC服务 在金属加工车间里&#xff0c;老师傅们弯腰在机床控制面板上手动输入程序的场景正逐渐成为历史。当车间里同时运行着发那科、西门子和三菱等不同品牌的数控设备时&#xff0c;如何高效管理这些设备的加工程序&…...

python政府集中采购管理系统设计与实现

目录同行可拿货,招校园代理 ,本人源头供货商项目背景核心功能模块技术实现要点应用价值项目技术支持获取博主联系方式 源码获取详细视频演示 &#xff1a;同行可合作点击我获取源码->获取博主联系方式->进我个人主页-->同行可拿货,招校园代理 ,本人源头供货商 项目背…...

还在熬夜调地图?让AI替你干

你还在为地图开发熬夜吗&#xff1f; "这个标注位置怎么不对&#xff1f;" "图层叠加出问题了&#xff0c;谁来看看&#xff1f;" "地图加载太慢&#xff0c;客户在催……" 每次做地图相关项目&#xff0c;开发者群里总是一片哀嚎。查文档、…...

全域流量矩阵系统的运筹学解法:用线性规划模型,算出你100个账号的最优流量分配

手里有100个账号&#xff0c;抖音30个、小红书25个、视频号20个、B站15个、快手10个——然后呢&#xff1f;大多数人的做法是&#xff1a;每个平台平均发&#xff0c;每个账号随便发&#xff0c;发完看天吃饭。这不叫矩阵运营&#xff0c;这叫资源浪费。今天换个完全不同的视角…...

深入GD32 CAN FD驱动:从寄存器配置到ISO 15765数据发送的代码逐行解析

GD32 CAN FD驱动开发实战&#xff1a;从寄存器配置到ISO 15765协议栈实现 在汽车电子和工业控制领域&#xff0c;CAN FD协议正逐步取代传统CAN总线成为高速通信的主流方案。GD32系列MCU凭借其出色的性价比和完整的外设支持&#xff0c;成为许多嵌入式开发者的首选。本文将深入剖…...

大模型训练师的炼丹之道 (3)-更高级训练,如何把大规模知识“刻”入模型

前言 在《炼丹之道》前两篇中&#xff0c;我们完成了从基础认知到身份重塑的入门仪式——当模型脱口而出“我是威震天”时&#xff0c;你已触摸到微调的魔法边缘。但那终究只是角色扮演的雏形&#xff0c;真正的炼丹术&#xff0c;在于将冰冷、精确的商业事实熔铸为模型的“肌…...

AI博士退出潮背后的科研适配性诊断

1. 这不是一篇“劝退”文&#xff0c;而是一份AI研究者的真实离职手记“Why I Quit My PhD in AI”——这个标题在2023—2024年反复出现在Substack、Medium和国内少数深度技术社区的首页。它不像“我如何用3个月拿下大厂offer”那样带着明确功利导向&#xff0c;也不像“AI博士…...