linux系统和网络(四):网络

        本文主要探讨linux网络相关知识,详细介绍看本博客其他博文。

网络基础(参考本博客其他文章:基础网络知识,socket网络编程,基于socket的聊天室和简易ftp)
        
路由器是局域网和外部网络通信出入口
        DNS实现域名和IP地址之间转换
        NAT是局域网主机发送数据包给外网将主机内网IP转换为外网IP
        网段 = IP地址 & 子网掩码

demo:

        编写client和server,server用于存储个人信息,client下发个人信息增删改查等信息到server,server执行并反馈结果

server

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>          
#include <sys/socket.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>#define SERPORT         8001
#define SERADDR         "192.168.200.181"
#define BACKLOG         100#define CMD_REGISTER            1
#define CMD_CHECK               2
#define CMD_GETINFO             3
#define CMD_DELETE              4typedef struct people_info
{char name[20];int age;int cmd;char result[20];
} info;typedef struct mark_flag
{int flg;int zero;
} mark;char name[3][10] = {0};
int age[3] = {0};
int cli_fd;
info st;
mark flag;void have_connect()
{struct sockaddr_in ser_addr = {0};struct sockaddr_in cli_addr = {0};socklen_t len = sizeof(cli_addr);int sockfd = socket(AF_INET,SOCK_STREAM,0);if(sockfd == -1){perror("socket");exit(-1);}ser_addr.sin_family = AF_INET;ser_addr.sin_port = htons(SERPORT);ser_addr.sin_addr.s_addr = inet_addr(SERADDR);bind(sockfd, (const struct sockaddr *)&ser_addr, sizeof(ser_addr));listen(sockfd, BACKLOG);cli_fd = accept(sockfd, (struct sockaddr *)&cli_addr,&len);send(cli_fd,"connect sucess",strlen("connect sucess"),0);printf("%s connect ...\n",inet_ntoa(cli_addr.sin_addr));}void find_info()
{int i;for(i = 0;i < (sizeof(age)/sizeof(age[0]));i++){if(!strncmp(name[i],st.name,strlen(st.name)))flag.flg = i;if(age[i] == 0)flag.zero = i;}
}void register_info()
{find_info();if(flag.flg != -1){strcpy(st.result,"user existed");}if(flag.zero == -1 &&  flag.flg == -1){strcpy(st.result,"user full");}if(flag.zero != -1 && flag.flg == -1){strcpy(name[flag.zero],st.name);age[flag.zero]  = st.age;strcpy(st.result,"register ok");}}void get_info()
{find_info();if(flag.flg == -1){strcpy(st.result,"have no user");}else{st.age = age[flag.flg];strcpy(st.name,name[flag.flg]);}
}void check_info()
{find_info();if(flag.flg == -1){strcpy(st.result,"have no user");}else{strcpy(st.result,"user existed");}
}void delete_info()
{find_info();if(flag.flg == -1){strcpy(st.result,"have no user");}else{age[flag.flg] = 0;memset(name[flag.flg],0,sizeof(name[flag.flg]));strcpy(st.result,"user deleted");}
}int main()
{have_connect();while(1){memset(&st,0,sizeof(st));recv(cli_fd, &st, sizeof(info), 0);memset(st.result,0,sizeof(st.result));flag.flg = -1;flag.zero = -1;if(st.cmd == CMD_REGISTER){register_info();}if(st.cmd == CMD_GETINFO){get_info();}if(st.cmd == CMD_CHECK){check_info();}if(st.cmd == CMD_DELETE){delete_info();}send(cli_fd,&st,sizeof(st),0);}return 0;
}

client 

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>          
#include <sys/socket.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>#define SERPORT         8001
#define SERADDR         "192.168.200.181"#define CMD_REGISTER            1
#define CMD_CHECK               2
#define CMD_GETINFO             3
#define CMD_DELETE              4typedef struct people_info
{char name[20];int age;int cmd;char result[20];
} info;int sockfd;
info st;void have_connect()
{struct sockaddr_in ser_addr = {0};char buf[20] = {0};sockfd = socket(AF_INET,SOCK_STREAM,0);if(sockfd == -1){perror("socket");exit(-1);}ser_addr.sin_family = AF_INET;ser_addr.sin_port = htons(SERPORT);ser_addr.sin_addr.s_addr = inet_addr(SERADDR);bind(sockfd, (const struct sockaddr *)&ser_addr, sizeof(ser_addr));connect(sockfd, (const struct sockaddr *)&ser_addr, sizeof(ser_addr));recv(sockfd,buf, sizeof(buf), 0);printf("%s\n",buf);
}int main()
{int flag;have_connect();while(1){memset(&st,0,sizeof(st));printf("ex:1 : register 2 : check 3 : get 4 : delete,please input:");scanf("%d",&flag);if(flag ==1){printf("name:");scanf("%s",st.name);printf("age:");scanf("%d",&st.age);st.cmd = CMD_REGISTER;}else{printf("name:");scanf("%s",st.name);if(flag ==2)st.cmd = CMD_CHECK;if(flag ==3)st.cmd = CMD_GETINFO;if(flag ==4)st.cmd = CMD_DELETE;if(flag == 0 || flag > 4)printf("input error\n");}send(sockfd,&st,sizeof(st),0);recv(sockfd,&st, sizeof(st), 0);if(strlen(st.result)){printf("%s\n",st.result);}else{printf("name : %s, age : %d\n",st.name,st.age);}}
}

结果显示:

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

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

相关文章

PSoc62™开发板之按键控制LED

实验目的 使用板子上的用户自定义按键控制LED亮灭&#xff0c;当按键按下时LED亮起来&#xff0c;不按下则不亮 电路图 按键电路 板子有两组按键&#xff0c;分别是系统复位按键和用户自定义按键&#xff0c;这里我们选择控制用户自定义按键&#xff0c;可以看到MCU_USER_B…

python 面试题第一弹

1. 如何理解Python中的深浅拷贝 浅拷贝&#xff08;Shallow Copy&#xff09;创建一个新的对象&#xff0c;该对象的内容是原始对象的引用。这意味着新对象与原始对象共享相同的内存地址&#xff0c;因此对于可变对象来说&#xff0c;如果修改了其中一个对象&#xff0c;另一个…

基于Python的新能源汽车销量分析与预测系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 基于Python的新能源汽车销量分析与预测系统是一个使用Python编程语言和Flask框架开发的系统。它可以帮助用户分析和预测新能源汽车的销量情况。该系统使用了关系数据库进行数据存储&#xff0c;并…

Netty组件基础

Netty入门简介 netty是一个异步、基于事件驱动的网络应用框架&#xff0c;用于快速开发可维护、高性能的网络服务器和客户端。 Netty优势 Netty解决了TCP传输问题&#xff0c;如黏包、半包问题&#xff0c;解决了epoll空轮询导致CPU100%的问题。并且Netty对API进行增强&#xf…

结构型模式 | 适配器模式

一、适配器模式 1、原理 适配器模式&#xff08;Adapter&#xff09;&#xff0c;将一个类的接口转换成客户希望的另外一个接口&#xff0c;使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式主要分为三类&#xff1a;类适配器模式、对象适配器模式、接口…

Redis源码精读:字符串

文章目录 前言代码位置核心类型SDS结构获取sds字符串的元数据的宏获取字符串长度重新设置sds长度创建字符串感悟最后 前言 Redis中实现了sds&#xff08;simple dynamic string&#xff09;这种字符串&#xff0c;它比c语言标准库的char*字符串更加实用 代码位置 src/sdc.h …

【算法题】11. 盛最多水的容器

题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容器。…

如何配置TLSv1.2版本的ssl

1、tomcat配置TLSv1.2版本的ssl 如下图所示&#xff0c;打开tomcat\conf\server.xml文件&#xff0c;进行如下配置&#xff1a; 注意&#xff1a;需要将申请的tomcat版本的ssl认证文件&#xff0c;如server.jks存放到tomcat\conf\ssl_file\目录下。 <Connector port"1…

理解io/nio/netty

一、io io即input/output&#xff0c;输入和输出 1.1 分类 输入流、输出流&#xff08;按数据流向&#xff09; 字节流&#xff08;InputStream/OutputStream&#xff08;细分File/Buffered&#xff09;&#xff09;、字符流(Reader/Writer&#xff08;细分File/Buffered/pu…

FL Studio 21最新版本for mac 21.2.2.3470中文解锁版

FL Studio 21最新版本for mac 21.2.2.3470中文解锁版是最新强大的音乐制作工具。它可以与所有类型的音乐一起创作出令人惊叹的音乐。它提供了一个非常简单且用户友好的集成开发环境&#xff08;IDE&#xff09;来工作。这个完整的音乐工作站是由比利时公司 Image-Line 开发的。…

某音上很火的圣诞树分享

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 效果截图&#xff08;这里不给动态了&#xff0c;某音到处都是了&#xff09;&#xff1a; 源代码&#xff1a; <script src"…

在Android中使用Flow获取网络连接信息

在Android中使用Flow获取网络连接信息 如果你是一名Android开发者&#xff0c;你可能会对这个主题感到有趣。考虑到几乎每个应用程序都需要数据交换&#xff0c;例如刷新动态或上传/下载内容。而互联网连接对此至关重要。但是&#xff0c;当用户的设备离线时&#xff0c;数据如…

Flask+Mysql项目docker-compose部署(Pythondocker-compose详细步骤)

一、前言 环境&#xff1a; Linux、docker、docker-compose、python(Flask)、Mysql 简介&#xff1a; 简单使用Flask框架写的查询Mysql数据接口&#xff0c;使用docker部署&#xff0c;shell脚本启动 优势&#xff1a; 采用docker方式部署更加便于维护&#xff0c;更加简单快…

k8s实战之ELK日志管理

首先查看总体流程 首先创建namespace apiVersion: v1 kind: Namespace metadata:name: kube-logging 一、首先创建es.yaml --- apiVersion: v1 #kubernetes API版本,采用最新版本v1 kind: Service #资源类型定义为Service metadata: name: elasticsearch-logging # …

时间Date

你有没有思考过时间问题&#xff1a; 前端为什么可以直接看见时间格式的数据 后端怎么接受的数据&#xff0c;怎么处理的 一般来说&#xff1a;前端传输来数据都是时间格式的字符串&#xff0c;那么后端需要能够解析时间格式的字符串&#xff0c;归功于JSONFormat ,可以解析…

LED靠近语音声光警示灯

应用范围: 适用于高压线塔、施工工地、铁路道口等危险区域。通过微波感应检测人体行动&#xff0c;触发语音警报&#xff0c;做到提前预警&#xff0c;避免可能发生的危险事故。 产品特点 1:设备采用独立太阳能供电系统&#xff0c;警示灯与语音报警装置均为太阳能独立供电&…

【Linux驱动】最基本的驱动框架 | LED驱动

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《Linux驱动》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f3c0;最基本的驱动框架⚽驱动程序框架⚽编程 &#x1f3c0;LED驱动⚽配置GPIO⚽编程…

智能优化算法应用:基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.向量加权平均算法4.实验参数设定…

uniapp创建/运行/发布项目

1、产生背景----跨平台应用框架 在移动端各大App盛行的时代&#xff0c;App之间的竞争也更加激烈&#xff0c;他们执着于让一个应用可以做多个事情 所以就应运而生了小程序&#xff0c;微信小程序、支付宝小程序、抖音小程序等等基于App本身的内嵌类程序。 但是各大App他不可…

【ARMv8M Cortex-M33 系列 1 -- SAU 介绍】

文章目录 Cortex-M33 SAU 介绍SAU 的主要功能包括SAU 寄存器配置示例 Cortex-M33 SAU 介绍 在 ARMv8-M 架构中&#xff0c;SAU&#xff08;Security Attribution Unit&#xff09;是安全属性单元&#xff0c;用于配置和管理内存区域的安全属性。SAU 是 ARM TrustZone 技术的一…