【项目 计网5】 4.15 TCP通信实现(服务器端)4.16 TCP通信实现(客户端)
文章目录
- 4.15 TCP通信实现(服务器端)
- 4.16 TCP通信实现(客户端)
4.15 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(0);}//2、绑定struct sockaddr_in saddr;saddr.sin_family = AF_INET; //协议族//把点分十进制IP地址转换成int 而且是网络字节序的//saddr->sin_addr.s_addr 本质是一个长整型的变量 结构体套结构体//第三个参数是传出参数,也就是转换好的void* 直接就给了saddr->sin_addr.s_addrinet_pton(AF_INET,"192.168.65.129",&saddr.sin_addr.s_addr); //p:point 点分十进制/*saddr->sin_addr.s_addr = 0; saddr->sin_addr.s_addr = INADDR_ANY; INADDR_ANY这个宏就是00.0.0.0 表示任意地址 比如一台主机有两个网卡,两个都绑定客户端无论用哪一个IP地址 都可以访问到这台主机*///saddr->sin_port = 9999; 这是主机字节序的9999 要转成网络字节序saddr.sin_port = htons(9999);int ret = bind(lfd,(struct sockaddr*)&saddr,sizeof(saddr));if(ret == -1){perror("bind");exit(0);}//3、监听ret = listen(lfd,8);if(ret == -1){perror("listen");exit(0);}//4、接收客户端连接struct sockaddr_in clientaddr;socklen_t len = sizeof(clientaddr);int cfd = accept(lfd,(struct sockaddr*)&clientaddr,&len);if(cfd == -1){perror("accept");exit(0);}//打印客户端信息//把获取到的网络字节序IP和端口转换成主机字节序char clientIp[16];inet_ntop(AF_INET,&clientaddr.sin_addr.s_addr,clientIp,sizeof(clientIp));unsigned short clientPort = ntohs(clientaddr.sin_port);printf("client IP is: %s, port is %d: \n",clientIp,clientPort);//5、通信//获取客户端数据char recvBuf[1024] = {0};len = read(cfd,recvBuf,sizeof(recvBuf));if(len == -1){perror("accept");exit(0);}else if(len > 0){printf("recv client data = %s\n",recvBuf);}else if(len == 0){//表示客户端关闭连接printf("client close...");}//给客户端发送数据char* data = "hello,i am server";write(cfd,data,strlen(data));//6、关闭文件描述符close(cfd);close(lfd);return 0;
}
4.16 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(0);}//2、绑定struct sockaddr_in saddr;saddr.sin_family = AF_INET; //协议族//把点分十进制IP地址转换成int 而且是网络字节序的//saddr->sin_addr.s_addr 本质是一个长整型的变量 结构体套结构体//第三个参数是传出参数,也就是转换好的void* 直接就给了saddr->sin_addr.s_addrinet_pton(AF_INET,"192.168.65.129",&saddr.sin_addr.s_addr); //p:point 点分十进制/*saddr->sin_addr.s_addr = 0; saddr->sin_addr.s_addr = INADDR_ANY; INADDR_ANY这个宏就是00.0.0.0 表示任意地址 比如一台主机有两个网卡,两个都绑定客户端无论用哪一个IP地址 都可以访问到这台主机*///saddr->sin_port = 9999; 这是主机字节序的9999 要转成网络字节序saddr.sin_port = htons(9999);int ret = bind(lfd,(struct sockaddr*)&saddr,sizeof(saddr));if(ret == -1){perror("bind");exit(0);}//3、监听ret = listen(lfd,8);if(ret == -1){perror("listen");exit(0);}//4、接收客户端连接struct sockaddr_in clientaddr;socklen_t len = sizeof(clientaddr);int cfd = accept(lfd,(struct sockaddr*)&clientaddr,&len);if(cfd == -1){perror("accept");exit(0);}//打印客户端信息//把获取到的网络字节序IP和端口转换成主机字节序char clientIp[16];inet_ntop(AF_INET,&clientaddr.sin_addr.s_addr,clientIp,sizeof(clientIp));unsigned short clientPort = ntohs(clientaddr.sin_port);printf("client IP is: %s, port is %d: \n",clientIp,clientPort);//5、通信//获取客户端数据char recvBuf[1024] = {0};len = read(cfd,recvBuf,sizeof(recvBuf));if(len == -1){perror("accept");exit(0);}else if(len > 0){printf("recv client data = %s\n",recvBuf);}else if(len == 0){//表示客户端关闭连接printf("client close...");}//给客户端发送数据char* data = "hello,i am server";write(cfd,data,strlen(data));//6、关闭文件描述符close(cfd);close(lfd);return 0;
}
相关文章:
【项目 计网5】 4.15 TCP通信实现(服务器端)4.16 TCP通信实现(客户端)
文章目录 4.15 TCP通信实现(服务器端)4.16 TCP通信实现(客户端) 4.15 TCP通信实现(服务器端) // TCP 通信的服务器端// TCP 通信的服务器端 #include <stdio.h> #include <arpa/inet.h> #incl…...
windows可视化界面管理服务器上的env文件
需求:在 Windows 环境中通过可视化界面编辑位于 Linux 主机上的 env 文件的情况,我现在环境是windows环境,我的env文件在linux的192.168.20.124上,用户是op,密码是op,文件绝对路径是/home/op/compose/env …...
自然语言处理在智能客服和聊天机器人中的应用
文章目录 1. 引言2. NLP基础2.1 词法分析2.2 语法分析2.3 语义理解2.4 情感分析 3. 智能客服中的应用3.1 自动问答3.2 意图识别3.3 情感分析与情绪识别 4. 聊天机器人中的应用4.1 对话生成4.2 上下文理解 5. 技术原理与挑战5.1 语言模型5.2 数据质量和多样性5.3 上下文理解 6. …...
为什么不建议使用@Async注解创建线程
1 前言 在很久很久之前,我有一段痛苦的记忆。那种被故障所驱使的感觉,在我脑海里久久无法驱散。 原因无它,有小伙伴开启了线程池的暴力使用模式。没错,就是下面这篇文章。 夺命故障 ! 炸出了投资人! 我有必要简单的…...
更新Ubuntu18.04上的CUDA和GCC
问题: 有一台服务器的GPU是1080,有八张卡,已经好久没有人用了。cuda版本是10.1,我现在拿来复现一些论文的模型,经常遇到版本依赖问题,报错Driver is too old。所以要更新一下驱动。遇到的主要问题是gcc版本也太低了&am…...
算法通过村第6关【青铜】| 如何通过中序和后序遍历恢复二叉树
中序:3 4 8 6 7 5 2 1 10 9 11 15 13 14 12 后序:8 7 6 5 4 3 2 10 15 14 13 12 11 9 1 通过这两个遍历顺序恢复二叉树 首先我们知道中序遍历顺序左中右,后序遍历顺序左右中 第一步: 由后序遍历确定根结点为1 > 由中序遍历…...
高斯牛顿法和LM算法异同示例
LM(Levenberg-Marquardt)算法和高斯牛顿(Gauss-Newton)算法是两种用于非线性最小二乘问题的优化算法,它们也有一些相似之处: 迭代优化:LM算法和高斯牛顿算法都使用迭代的方式来优化参数值&#…...
奥威BI财务数据分析方案:只做老板想看的
奥威BI财务数据分析方案是一套从老板的视角出发,做老板想看的财务数据分析报表,帮助老板更好地了解公司的财务状况和经营绩效的综合性智能财务数据分析方案,可实现财务数据分析可视化、灵活自主性,随时为老板提供最为直观的财务数…...
opencv进阶19-基于opencv 决策树cv::ml::DTrees 实现demo示例
opencv 中创建决策树 cv::ml::DTrees类表示单个决策树或决策树集合,它是RTrees和 Boost的基类。 CART是二叉树,可用于分类或回归。对于分类,每个叶子节点都 标有类标签,多个叶子节点可能具有相同的标签。对于回归,每…...
Unity通过TCP/IP协议进行通信
uinty项目中需要与C编写的硬件进行通信,因此采用TCP/IP协议进行通信,主要实现了与服务器的连接、通信内容的发送以及断开连接等功能。 根据确定好的协议格式,编写需要发送的内容,将其转为字节流(byte[])通过…...
基于VuePress搭建知识库
我这边需要搭建一个运维知识库,将项目的方方面面记录下来,方便新手接手运维。 准备环境 Nginx 1.19.0VuePress 1.xMinio RELEASE.2022-02-16T00-35-27Zvuepress-theme-vdoing主题 安装VuePress 根据官网步骤即可 # 创建目录 mkdir vuepress-starter…...
odoo安装启动遇到的问题
问题:在第一次加载odoo配置文件的时候,启动失败 方法: 1、先检查odoo.conf的内容,尤其是路径 [options] ; This is the password that allows database operations: ; admin_passwd admin db_host 127.0.0.1 db_port 5432 d…...
【Flink】Flink提交流程
我们通常在学习的时候需要掌握大数据组件的原理以便更好的掌握这个大数据组件,Flink实际生产开发过程中最常见的就是提交到yarn上进行调度,模式使用的Per-Job模式,下面我们就给大家讲下Flink提交Per-Job任务到yarn上的流程,流程图…...
哪种英特尔实感设备适合您?
原文链接 https://www.intelrealsense.com/which-device-is-right-for-you/ 无论您是深度和跟踪硬件的新手,还是经验丰富的专业人士,确定我们提供的众多英特尔实感产品中哪些产品适合您的项目仍然是一项挑战。在这篇文章中,我们将讨论英特尔…...
C++11的四种强制类型转换
目录 语法格式 static_cast(静态转换) dynamic_cast(动态转换) const_cast(常量转换) reinterpret_cast(重解释) 语法格式 cast-name <typename> (expression) 其中cast-name为static_cast、dynamic_cast、const_cast 和 reinterpret_cast之一…...
分布式事务(4):两阶段提交协议与三阶段提交区别
1 两阶段提交协议 两阶段提交方案应用非常广泛,几乎所有商业OLTP数据库都支持XA协议。但是两阶段提交方案锁定资源时间长,对性能影响很大,基本不适合解决微服务事务问题。 缺点: 如果协调者宕机,参与者没有协调者指…...
React源码解析18(9)------ 实现多节点渲染【修改beginWork和completeWork】
摘要 目前,我们已经实现了单节点的,beginWork,completeWork,diff流程。但是对于多节点的情况,比如: <div><span></span><span></span> </div>这种情况,我们还没有处…...
【GUI】基于开关李雅普诺夫函数的非线性系统稳定(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Redis 缓存满了怎么办?
引言 Redis 缓存使用内存来保存数据,随着需要缓存的数据量越来越大,有限的缓存空间不可避免地会被写满。此时,应该怎么办?本篇文章接下来就来聊聊缓存满了之后的数据淘汰机制。 值得注意的是,在 Redis 中 过期策略 和…...
Grafana 安装配置教程
Grafana 安装配置教程 一、介绍二、Grafana 安装及配置2.1 下载2.2 安装2.2.1 windows安装 - 图形界面2.2.2 linux安装 - 安装脚本 三、Grafana的基本配置3.1 登录3.2 Grafana设置中文 四、grafana基本使用 一、介绍 Grafana是一个通用的可视化工具。对于Grafana而言࿰…...
【Linux】临界资源和临界区
目录 一、临界资源 二、如何实现对临界资源的互斥访问 1、互斥量 2、信号量 3、临界区 三、临界区 四、进程进入临界区的调度原则 一、临界资源 概念:临界资源是一次仅允许一个进程使用的共享资源,如全局变量等。 二、如何实现对临界资源的互斥访问 …...
拓扑排序Topological sorting/DFS C++应用例题P1113 杂务
拓扑排序 拓扑排序可以对DFS的基础上做变更从而达到想要的排序效果。因此,我们需要xy准备,vis数组记录访问状态,每一个任务都可以在dfs的过程中完成。 在使用拓扑排序方法时一些规定: 通常使用一个零时栈不会直接输出排序的节点…...
基于jenkins构建生成CICD环境
目录 一、安装配置jenkins 1、环境配置 2、软件要求 3、jdk安装(我是最小化安装,UI自带java要先删除rm -rf /usr/local/java 4、安装jenkins-2.419-1.1 二、Jenkins配置 1、修改jenkins初始密码 2、安装 Jenkins 必要插件 3、安装 Publish Over SS…...
在线图片怎么转换成PDF?在线图片转换成PDF步骤介绍
文件格式要转化不知道怎么办?想要网上下载文件格式转换软件,但是却不知道下载哪个好?今天小编小编就给大家分享一下靠谱的小圆象PDF转换器工具,想知道这款软件好不好用?在线图片怎么转换成PDF?那就进来看看吧。 在线图片怎么转换成PDF 小圆象PDF转换…...
Linux共享库基础及实例
共享库是将库函数打包成一个可执行文件,使得其在运行时可以被多个进程共享。 目标库 回顾下构建程序的一种方式: 将每个源文件编译成目标文件,再通过链接器将这些目标文件链接组成一个可执行程序。 gcc -g -c prog.c mod1.c mod2.c gcc -g …...
java八股文面试[java基础]——final 关键字作用
为什么局部内部类和匿名内部类只能访问final变量: 知识来源 【基础】final_哔哩哔哩_bilibili...
Redis 分布式锁存在什么问题 ?如何解决 ?
目录 1. 如何实现分布式锁 2. Redis 分布式锁存在什么问题 2.1 解决死锁问题 2.2 解决锁误删问题 1. 如何实现分布式锁 Redis 天生就可以作为一个分布式系统来使用,所以它实现的锁都是分布式锁。 Redis 可以通过 setnx(set if not exists)…...
n5173b是德科技keysight N5173B信号发生器
产品概述 是德科技/安捷伦N5173B EXG模拟信号发生器 当您需要平衡预算和性能时,是德科技N5173B EXG微波模拟信号发生器是经济高效的选择。它提供解决宽带滤波器、放大器、接收机等参数测试的基本信号。执行基本LO上变频或CW阻塞,低成本覆盖13、20、31.…...
React源码解析18(10)------ 实现多节点的Diff算法
摘要 在上一篇中,实现了多节点的渲染。但是之前写得diff算法,只能适用于单节点的情况,例如这种情况: <div><p><span></span></p> </div>如果对于多节点的情况: <ul><…...
Linux指令篇!
Linux 是一个广泛使用的开源操作系统,以下是一些常用的 Linux 知识点和指令: 1. 文件和目录操作: - ls:列出目录内容 - cd:切换目录 - pwd:显示当前工作目录 - mkdir:创建目录 - touch…...
wordpress snow 3d/凡科建站模板
1,什么是Session Session一般译为会话,是解决Http协议的无状态问题的方案,可以将一次会话中的数据存储在服务器端的内存中,保证在下一次的会话中可以使用。 在客户端浏览器第一次向服务器端发送请求时,服务器端会为这个…...
湖南网站制作公司/软文网站大全
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m n)来保存 nums2 中…...
北海教网站建设/登封网站建设公司
文章目录BT A2DP、AVRCPA2DPAVRCPBT A2DP、AVRCP A2DP A2DP 全名是 Advenced Audio Distribution Profile 蓝牙音频传输模型协议。 A2DP 规定了使用蓝牙非同步传输信道方式,传输高质量音乐文件数据的协议堆栈软件和使用方法,基于该协议就能通过以蓝牙方…...
做厂房的网站/市场调研报告万能模板
React Native的版本升级插件(仅是android), react-native版本需要0.17.0及以上 如何安装 1.首先安装npm包 npm install react-native-upgrade-android --save 2.link 自动link方法~ npm requires node version 4.1 or higher npm link link成功命令行会提…...
wordpress 清空草稿/广告联盟app下载官网
虽然益智游戏多种多样,有考验反应的打地鼠、切水果,有考验观察力的找茬、三消,还有考验逻辑推理的物理解密型游戏,但像蠢蛋秀这样用脑筋急转弯的方式考验玩家的游戏也算是独此一家了,操作很简单,玩起来很有…...
网络营销发展现状与趋势/seo 优化
示意图: 黄线:太阳发出的平行光线 视觉范围可以使用一个立方体表示,左右确定宽度,上下确定高度,远近确定长度 引入: import * as dat from dat.gui //界面控制 关键代码: //平行光投射相机的属…...