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;
}

 运行结果:

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

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

相关文章

包管理工具详解npm 、 yarn 、 cnpm 、 npx 、 pnpm(2023)

1、包管理工具npm &#xff08;1&#xff09;包管理工具npm&#xff1a; Node Package Manager&#xff0c;也就是Node包管理器&#xff1b;但是目前已经不仅仅是Node包管理器了&#xff0c;在前端项目中我们也在使用它来管理依赖的包&#xff1b;比如vue、vue-router、vuex、…

【Spring中MySQL连接错误】Cannot load driver class: com.mysql.cj.jdbc.Driver

Caused by: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method ‘dataSource’ threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: com.mysql.cj.jdbc.Driver Caused by: java.lang.IllegalState…

干货满满的Python知识,学会这些你也能成为大牛

目录 1. 爬取网站数据 2. 数据清洗与处理 3. 数据可视化 4. 机器学习模型训练 5. 深度学习模型训练 6. 总结 1. 爬取网站数据 在我们的Python中呢&#xff0c;使用爬虫可以轻松地获取网站的数据。可以使用urllib、requests、BeautifulSoup等库进行数据爬取和处理。以下是…

(kubernetes)k8s常用资源管理

目录 k8s常用资源管理 1、创建一个pod 1&#xff09;创建yuml文件 2&#xff09;创建容器 3&#xff09;查看所有pod创建运行状态 4&#xff09;查看指定pod资源 5&#xff09;查看pod运行的详细信息 6&#xff09;验证运行的pod 2、pod管理 1&#xff09;删除pod 2…

校验 GPT-4 真实性的三个经典问题:快速区分 GPT-3.5 与 GPT-4,并提供免费测试网站

现在已经有很多 ChatGPT 的套壳网站&#xff0c;以下分享验明 GPT-4 真身的三个经典问题&#xff0c;帮助你快速区分套壳网站背后到底用的是 GPT-3.5 还是 GPT-4。 大家可以在这个网站测试&#xff1a;https://ai.hxkj.vip&#xff0c;免登录可以问三条&#xff0c;登录之后无限…

“深入解析JVM:探索Java虚拟机的工作原理和优化技巧“

标题&#xff1a;深入解析JVM&#xff1a;探索Java虚拟机的工作原理和优化技巧 摘要&#xff1a;Java虚拟机&#xff08;JVM&#xff09;作为Java语言的核心&#xff0c;承担着将Java字节码转化为可执行代码的重要任务。本文将深入探索JVM的工作原理和优化技巧&#xff0c;帮助…

STM32 F103C8T6学习笔记1:开发环境与原理图的熟悉

作为一名大学生&#xff0c;学习单片机有一段时间了&#xff0c;也接触过嵌入式ARM的开发&#xff0c;但从未使用以及接触过STM32C8T6大开发使用&#xff0c;于是从今日开始&#xff0c;将学习使用它~ 本文介绍STM32C8T6最小系统开发环境搭建注意问题&#xff0c;STM32C8T6单片…

JAVA设计模式汇总

文章目录 一、设计模式分为三大类二、设计模式的六大原则三、汇总 一、设计模式分为三大类 创建型模式共五种&#xff1a;工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式共七种&#xff1a;适配器模式、装饰器模式、代理模式、外观模式、桥接模式…

【Docker晋升记】No.2 --- Docker工具安装使用、命令行选项及构建、共享和运行容器化应用程序

文章目录 前言&#x1f31f;一、Docker工具安装&#x1f31f;二、Docker命令行选项&#x1f30f;2.1.docker run命令选项&#xff1a;&#x1f30f;2.2.docker build命令选项&#xff1a;&#x1f30f;2.3.docker images命令选项&#xff1a;&#x1f30f;2.4.docker ps命令选项…

20.5 HTML 媒体

1. video视频标签 video视频标签: 是HTML中用于在网页上嵌入视频的元素.常用的视频标签属性: - src属性: 指定视频文件的URL地址. - controls属性: 用于显示视频播放控件(如播放按钮, 进度条等), 使用户能够控制视频的播放. - width和height: 指定视频的宽度和高度. - autopla…

Map Reduce教程_编程入门自学教程_菜鸟教程-免费教程分享

教程简介 MapReduce是一种编程模型&#xff0c;用于大规模数据集&#xff08;大于1TB&#xff09;的并行运算。概念"Map&#xff08;映射&#xff09;"和"Reduce&#xff08;归约&#xff09;"&#xff0c;是它们的主要思想&#xff0c;都是从函数式编程语…

【Unity实战系列】Unity的下载安装以及汉化教程

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;怎么说呢&#xff0c;其实这才是我以后真正想写想做的东西&#xff0c;虽然才刚开始&#xff0c;但好歹&#xff0c;我总算是启程了。今天要分享…

3.4 Spring MVC注解

注解名称 注解说明 RequestMapping 用来处理请求地址映射的注解&#xff0c;可以在接口、类和方法上使用 value属性 表示请求地址&#xff0c;与path属性一致 method属性 表示接收HTTP请求方法&#xff0c;默认接收所有请求方法&#xff0c;请求包括GET、POST、PUT、DEL…

Java-网络编程

TCP TCP&#xff08;Transmission Control Protocol&#xff09;是一种在计算机网络中用于可靠数据传输的协议。它是一种面向连接的协议&#xff0c;确保数据在发送和接收之间的可靠性和有序性。以下是TCP是如何工作的简要概述&#xff1a; 建立连接&#xff1a; 当两台计算机…

使用RecyclerView构建灵活的列表界面

使用RecyclerView构建灵活的列表界面 1. 引言 在现代移动应用中&#xff0c;列表界面是最常见的用户界面之一&#xff0c;它能够展示大量的数据&#xff0c;让用户可以浏览和操作。无论是社交媒体的动态流、商品展示、新闻列表还是任务清单&#xff0c;列表界面都扮演着不可或…

第一百二十四天学习记录:C++提高:STL-deque容器(上)(黑马教学视频)

deque容器 deque容器基本概念 功能&#xff1a; 双端数组&#xff0c;可以对头端进行插入删除操作 deque与vector区别 vector对于头部的插入删除效率低&#xff0c;数据量越大&#xff0c;效率越低 deque相对而言&#xff0c;对头部的插入删除速度比vector快 vector访问元素的…

LeetCode150道面试经典题--同构字符串(简单)

1.题目 给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那么这两个字符串是同构的。每个出现的字符都应当映射到另一个字符&#xff0c;同时不改变字符的顺序。不同字符不能映射到同一个字符上&#xff0c…

【LeetCode 算法】Minimum Falling Path Sum II 下降路径最小和 II-动态规划-SP

文章目录 Minimum Falling Path Sum II 下降路径最小和 II问题描述&#xff1a;分析代码DP Tag Minimum Falling Path Sum II 下降路径最小和 II 问题描述&#xff1a; 给你一个 n x n 整数矩阵 grid &#xff0c;请你返回 非零偏移下降路径 数字和的最小值。 非零偏移下降路…

ppt怎么压缩?试试这样压缩文件

当PPT文件体积过大时&#xff0c;打开的速度就会很慢&#xff0c;演示的时候刘程度也会受到影响&#xff0c;其次&#xff0c;现在很多平台对于上传的文件是有大小限制的&#xff0c;比如超过100M的文件就无法上传、发送等等&#xff0c;那么&#xff0c;怎么才能压缩PPT文件呢…

VR全景乡村旅游浇灭乡愁,近距离体验自然之美

说起乡愁&#xff0c;可能每位漂泊的游子都有所感受&#xff0c;在外漂泊数十载&#xff0c;每到佳节倍思亲&#xff0c;家乡的一草一木都浮现在脑海中&#xff0c;满载着儿时的回忆。为了留住那抹儿时回忆&#xff0c;VR全景助力数字化乡村建设。 乡村振兴是国家的重大战略&am…