UNIX网络编程——TCP协议API 基础demo服务器代码
目录
一.TCP客户端API
1.创建套接字
2.connect连接服务器编辑
3.send发送信息
4.recv接受信息
5.close
二.TCP服务器API
1.socket创建tcp套接字(监听套接字)
2.bind给服务器套接字绑定port,ip地址信息
3.listen监听并创建连接队列
4.accept提取客户端的连接
5.send,recv
编辑
6.close
实例:基于TCP客户端与服务器的实现与代码联调

一.TCP客户端API
1.创建套接字

2.connect连接服务器
3.send发送信息

4.recv接受信息

5.close

二.TCP服务器API
1.socket创建tcp套接字(监听套接字)

2.bind给服务器套接字绑定port,ip地址信息

3.listen监听并创建连接队列


4.accept提取客户端的连接


5.send,recv

6.close
close(套接字)会导致对方recv收到0长度报文
实例:基于TCP客户端与服务器的实现与代码联调
#include <cstdio>
#include<iostream>
#include<string.h> //memset
#include<arpa/inet.h> //htos
#include<sys/socket.h> //socket
#include<netinet/in.h> //struct sockaddr
#include<unistd.h> //close
#include<sys/wait.h>void ser() //服务端
{//第一步建立套接字int ser_sk = socket(PF_INET, SOCK_STREAM, 0); //第二步建立地址信息,并用bind进行绑定struct sockaddr_in ser_add ; //建立服务端套接字地址结构memset(&ser_add, 0, sizeof ser_add); ser_add.sin_family = AF_INET; //填写对应的port,ip,协议族ser_add.sin_port = htons(9100);ser_add.sin_addr.s_addr = htonl(INADDR_ANY); //记得转换为网络字节序bind(ser_sk,(struct sockaddr *)&ser_add,sizeof ser_add); //绑定IP,port//第三步监听套接字,创建连接队列listen(ser_sk, 5); //第四步进行accpet连接通信struct sockaddr_in cli_add;socklen_t cli_len = sizeof cli_add;sleep(1);int cli_sk = accept(ser_sk,(struct sockaddr *)&cli_add , &cli_len); //建立连接,获得通信套接字,和对方套接字信息//接受信息unsigned char buffer[1500] = "";char ip[16] = "";unsigned short port = 0;inet_ntop(AF_INET, &cli_add.sin_addr.s_addr,ip,16); //把32为ip地址转化为字符串port = ntohs(cli_add.sin_port); //网络字节序转化为主机字节序printf("客户端:%s %d connnected\n",ip,port);int len = recv(cli_sk, buffer, sizeof buffer , 0); //接受信息printf("%s\n", buffer);close(ser_sk);
}void cli() //客户端
{//第一步:建立套接字int cli_sk = socket(PF_INET, SOCK_STREAM, 0); //建立客户端套接字//第二步建立发送到的地址结构struct sockaddr_in ser_add; memset(&ser_add, 0, sizeof ser_add);ser_add.sin_family = AF_INET; ser_add.sin_addr.s_addr = inet_addr("127.0.0.1");ser_add.sin_port = htons(9100);//第三步骤建立连接,给客户端分配端口connect(cli_sk, (struct sockaddr*)&ser_add, sizeof ser_add); //第四步发送信息const char* buffer = "hello world";send(cli_sk, buffer, 11, 0); close(cli_sk);
}void pra() {pid_t pid = fork();if (pid == 0){sleep(1);//开启客户端cli();}else if(pid > 0){//开启服务端ser();int status = 0;wait(&status);}}int main() {pra();return 0;
}
运行结果:

相关文章:
UNIX网络编程——TCP协议API 基础demo服务器代码
目录 一.TCP客户端API 1.创建套接字 2.connect连接服务器编辑 3.send发送信息 4.recv接受信息 5.close 二.TCP服务器API 1.socket创建tcp套接字(监听套接字) 2.bind给服务器套接字绑定port,ip地址信息 3.listen监听并创建连接队列 4.accept提取客户端的连接 5.send,r…...
[保研/考研机试] KY163 素数判定 哈尔滨工业大学复试上机题 C++实现
题目链接: 素数判定https://www.nowcoder.com/share/jump/437195121691718831561 描述 给定一个数n,要求判断其是否为素数(0,1,负数都是非素数)。 输入描述: 测试数据有多组,每组输入一个数…...
iOS_crash文件的获取及符号化(解析)
文章目录 1. 使用 symbolicatecrash 解析 .ips 文件:2. 使用 CrashSymbolicator.py 解析 ips 文件3. 使用 atos 解析 crash 文件4. Helps4.1 .ips 文件获取4.2 .crash 文件获取4.3 获取 .dSYM 和 .app 文件4.4 使用 dwarfdump 查询 uuid 5. Tips6. 总结 1. 使用 sym…...
STM32定时器TIM控制
一、CubeMX的设置 1、新建工程,进行基本配置 2、配置定时器TIM2 1)定时器计算公式:(以下两条公式相同) Tout ((ARR1) * PSC1)) / Tclk TimeOut ((Prescaler 1) * (Period 1)) / TimeClockFren Tout TimeOut&…...
网络请求中,token和cookie有什么区别
HTTP无状态,每次请求都要携带cookie,以帮助识别用户身份; 服务端也可以向客户端set-cookie,cookie大小限制为4kb; cookie默认有跨域限制,不跨域共享和传递,例如: 现代浏览器开始禁…...
Javaweb_xml
文章目录 1.xml是什么?2.xml的用途 1.xml是什么? xml 是可扩展的标记性语言 2.xml的用途 1、用来保存数据,而且这些数据具有自我描述性 2、它还可以做为项目或者模块的配置文件 3、还可以做为网络传输数据的格式(现在 JSON 为主…...
http相关知识点
文章目录 长链接http周边会话保持方案1方案2 基本工具postmanFiddlerFiddler的原理 长链接 一张网页实际上可能会有多种元素组成,这也就说明了网页需要多次的http请求。可由于http是基于TCP的,而TCP创建链接是有代价的,因此频繁的创建链接会…...
【SA8295P 源码分析】68 - Android 侧用户层 输入子系统获取 /dev/input/event0 节点数据 代码流程分析
【SA8295P 源码分析】68 - Android 侧用户层 输入子系统获取 /dev/input/event0 节点数据 代码流程分析 一、EventHub.cpp 监听 /dev/input/event0 节点流程二、EventHub.cpp 读取 /dev/input/event0 节点数据流程系列文章汇总见:《【SA8295P 源码分析】00 - 系列文章链接汇总…...
走出迷宫(多组输入bfs)
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 小明现在在玩一个游戏,游戏来到了教学关卡,迷宫是一个N*M的矩阵。 小明的起点在地图中用“S”来表示,终点用“E”来表示,障碍物用“#…...
Linux系统编程-终端、进程组、会话
一、终端的概念 在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(Controlling Terminal),进程中,控制终端是保存在PCB中的信息,而fork会复制PCB中的信息…...
Linux部分文件操作记录
问题描述 多级文件夹下,有多个同名文件,以及其他无关文件,为了减轻体量,遍历目录,只保留对应文件 首先open terminal here find . -type f \( ! -name algo_imu.bin -a ! -name post_gnss_only_error.log -a ! -name…...
Android系统-进程-Binder2-Java层
引言: 对于Android系统,一般是从java层到native层,再到kernel驱动层,形成一个完整的软件架构。Android系统中的Binder IPC通信机制的整体架构,从java层到底层驱动层是怎么样的一个架构和原理的呢? 概念与…...
体渲染原理及WebGL实现【Volume Rendering】
体渲染(Volume Rendering)是NeRF神经场辐射AI模型的基础,与传统渲染使用三角形来显示 3D 图形不同,体渲染使用其他方法,例如体积光线投射 (Volume Ray Casting)。本文介绍体渲染的原理并提供Three.js实现代码ÿ…...
VUE3组件
组件基础 {#components-basics} 组件允许我们将 UI 划分为独立的、可重用的部分,并且可以对每个部分进行单独的思考。在实际应用中,组件常常被组织成层层嵌套的树状结构: 这和我们嵌套 HTML 元素的方式类似,Vue 实现了自己的组件…...
【iOS】autoreleasepool
来说一下最近在了解的autoreleasepool吧,我们可能平时书写过许多脑残代码,其有很多的缺陷但是我们可能当时学的比较浅就也不太了解,就像下面这样的: for (int i 0; i < 1000000; i) {NSNumber *num [NSNumber numberWithInt…...
0基础学习VR全景平台篇 第80篇:Insta360 影石如何直播推流
一、下载Insta360 Pro APP 1、手机进入Insta360官网Insta360 | Action Cameras | 360 Cameras | VR Cameras,页面往下滑动到Insta360 Pro2相机处,点击相机图片进入详情页。详情页继续下滑到到手机APP处,根据自己的手机系统选择对应的客户端进…...
大语言模型之三 InstructGPT训练过程
大语言模型 GPT历史文章中简介的大语言模型的的发展史,并且简要介绍了大语言模型的训练过程,本篇文章详细阐述训练的细节和相关的算法。 2020年后全球互联网大厂、AI创业公司研发了不少AI超大模型(百亿甚至千亿参数),…...
ChatGPT在自动化报告和数据分析中的应用如何?
ChatGPT在自动化报告和数据分析领域的应用正日益受到关注,这种强大的语言模型不仅可以加速报告生成的过程,还可以辅助数据分析,从而帮助企业和个人更高效地处理信息和做出决策。以下将详细探讨ChatGPT在自动化报告和数据分析中的应用。 **自…...
面试热题(三数之和)
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 输入&…...
在idea运行python文件
在idea运行python文件 如果在idea运行python文件而没有弹出run的选项,则点击File->Settings…->Plugins,在里面搜索python,如果没有显示则在Maketplace进行搜索, 接着Install,然后restart...
免费QQ空间历史说说备份完整指南:一键保存你的青春记忆
免费QQ空间历史说说备份完整指南:一键保存你的青春记忆 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心QQ空间里那些记录着青春点滴的说说会随着时间流逝而消失…...
mysql如何删除表中的主键_使用alter table drop primary key
MySQL删除主键不能直接用DROP PRIMARY KEY,需先移除AUTO_INCREMENT属性(如存在),再执行DROP PRIMARY KEY;否则报错1075,且删后InnoDB会启用隐藏row_id导致性能与维护风险。MySQL 删除主键不能直接用 ALTER …...
STC32G12K128开发板CAN通信实战:从硬件连接到Keil C251程序调试(附源码)
STC32G12K128开发板CAN通信全流程实战指南 1. 硬件准备与环境搭建 拿到STC32G12K128开发板的第一件事,就是检查配件是否齐全。除了开发板本体,你还需要准备以下硬件: CAN转TTL模块:这是连接开发板与CAN总线的关键桥梁,…...
StructBERT零样本模型:AI万能分类器在新闻分类中的应用
StructBERT零样本模型:AI万能分类器在新闻分类中的应用 1. 引言:新闻分类的挑战与机遇 在信息爆炸的时代,新闻媒体每天生产海量内容,涵盖政治、经济、科技、体育、娱乐等各个领域。传统的人工分类方式不仅效率低下,还…...
双非一战上岸东南网安专硕:从迷茫择校到复试逆袭的360分全记录
双非逆袭985:一位普通考生的东南网安专硕上岸全纪实 站在东南大学四牌楼校区梧桐树下时,我依然觉得像场梦。一年前那个在自习室啃着冷包子刷题的普通二本学生,如今竟真的成为了这所百年名校的研究生。这不是什么天才逆袭的爽文,而…...
如何3步破解百度网盘Mac版下载限制?终极免费SVIP体验指南
如何3步破解百度网盘Mac版下载限制?终极免费SVIP体验指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘Mac版龟速下载而烦…...
幻境·流金科研辅助:论文插图生成、数据可视化美学增强、期刊格式适配
幻境流金科研辅助:论文插图生成、数据可视化美学增强、期刊格式适配 想象一下这个场景:深夜的实验室里,你刚刚完成了一组复杂的数据分析,结果非常漂亮。但当你打开论文草稿,准备插入图表时,面对那些千篇一…...
智慧树刷课插件终极指南:3步实现学习自动化
智慧树刷课插件终极指南:3步实现学习自动化 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台的繁琐操作而烦恼吗?智慧树刷课插件…...
创牌无管件鱼缸:把水景艺术搬回家,治愈养鱼新体验
一、引言:传统养鱼的“痛点”与破局之道养鱼本是治愈身心、装点生活的美好小事,但传统鱼缸外露的管件、杂乱的管路,不仅破坏整体视觉美感,日常清洁时更是藏污纳垢、耗时费力。如何让养鱼回归“纯粹治愈”,兼顾颜值与实…...
4.13-4.19 补题
牛客竞赛 牛客周赛 Round 139:A 题、B 题、C 题、D 题、E 题洛谷 P1142 —— 轰炸 P1222 —— [HNOI2001]产品加工PTA SMU2026 Spring 天梯赛 7-5 —— 三点共线 7-7 —— 大幂数 7-8 —— 现代战争 7-9 —— 算式拆解 7-10 —— 三点共线 7-11 —— 胖达的山头 7-1…...

