Linux中服务端开发

1 创建socket,返回一个文件描述符lfd---socket();

2 将lfd和IP,PROT进行绑定---bind();

3 将lfd由主动变成被动监听---listen();

4 接收一个新的连接,得到一个的文件描述符cfd--accept()'

--该文件描述符用于与客户端通信

5 while(1)

{

接受数据:read和recv

发送数据:write和send

}

6 关闭文件描述符:close(lfd)close(cfd);

完整代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<unistd.h>
#include <sys/socket.h>
#include<arpa/inet.h>
#include <netinet/in.h>
#include <ctype.h>
int main()
{//int socket(int domain, int type, int protocol);int lfd=socket(AF_INET,SOCK_STREAM ,0);if(lfd<0){perror("socket error");return -1;}struct sockaddr_in addr;bzero(&addr,sizeof(addr));//初始化置0addr.sin_family=AF_INET;addr.sin_port=htons(9999);//端口addr.sin_addr.s_addr=htonl(INADDR_ANY);//随机获得一个可使用IP// int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);int ret=	bind(lfd,(struct sockaddr*)&addr,sizeof(addr));//绑定if(ret<0){perror("bind error");return -1;}// int listen(int sockfd, int backlog);listen(lfd,128);//监听//int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);int cfd=accept(lfd,NULL,NULL);//获取连接if(cfd<0){perror("accept error");return -1;}int i;int n;char buf[64];while(1){memset(buf,0x00,sizeof(buf));n=read(cfd,buf,sizeof(buf));//读数据if(n<0||n==0)//n==0时为客户端关闭{printf("read error or client close\n");break;}printf("n==[%d],buf==[%s]\n",n,buf);for(i=0;i<strlen(buf);i++){buf[i]=	toupper(buf[i]);//全部变大写}write(cfd,buf,strlen(buf));//发送给客户端}close(lfd);close(cfd);return 0;
}

结果:使用ifconfig -a查看本机IP

nc IP 端口   命令连接服务端

结果:

服务端结果:

通过以下操作可以通过accept函数获得客户端的IP地址和PROT端口:

//int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);struct sockaddr_in client_addr;socklen_t len=sizeof(client_addr);int cfd=accept(lfd,(struct sockaddr*)&client_addr,&len);char SIP[16];memset(SIP,0x00,sizeof(SIP));printf("client:IP==[%s],PROT==[%d]\n",inet_ntop(AF_INET,&client_addr.sin_addr.s_addr,SIP,sizeof(SIP)),ntohs(client_addr.sin_port));//printf("client:IP==[%x],PROT==[%d]\n",ntohl(client_addr.sin_addr.s_addr),ntohs(client_addr.sin_port));

 

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

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

相关文章

MySQL——存储引擎

存储引擎 InnoDB 是 MySQL 默认的存储引擎&#xff0c;只有在需要它不支持的特性时&#xff0c;才会考虑其他存储引擎 实现了 4 个标准的隔离级别&#xff0c;默认级别可重复度。在可重复度隔离级别下&#xff0c;通过 MVCC 间隙锁防止幻读 主索引是聚簇索引 内部做了很多…

Docker 日志存储大小限制,默认会充爆磁盘

背景 在容器化部署的时候&#xff0c;因为没有指定日志的最大存储时间&#xff0c;导致磁盘被充爆。查看日志 一般使用docker logs -f --tail 行数 容器名称 来查看容器的运行日志&#xff0c;但是在容器被初始化的时候&#xff0c;需要指定日志的最大存储时间&#xff0c;因为…

React学习笔记

1、React初步认识 React构建Web和原生交互界面的库,相较于其它前端框架的优势,具有丰富的生态跨平台支持。 1.1、React的开发依赖 开发React必须依赖三个库: react:包含react所必须的核心代码;react-dom:react渲染在不同平台所需要的核心代码 ;babel:将jsx转换成Rea…

白云山板蓝根,一年四季都得备着

上班半年&#xff0c;每天都感觉在行尸走肉&#xff0c;长时间地坐在电脑前真的不行&#xff01;身体越来越差&#xff0c;面相也越来越糟糕&#xff0c;不仅有黑眼圈&#xff0c;痘痘也冒出来了不少&#xff0c;堪比整容&#xff0c;朋友们都纷纷调侃我&#xff0c;说我上半年…

限流、流量削峰?

学MQ的时候&#xff0c;经常会有人拿秒杀这个场景去介绍流量削峰。这很好理解&#xff0c;将请求放到一个中转站去暂存&#xff0c;虽然生产者生产很快&#xff0c;但消费者可以慢慢去中转站获取。 关于限流&#xff0c;之前一直以为限流的思想类似MQ&#xff0c;不过是内存中…

网络安全: Kali Linux 使用 docker-compose 部署 openvas

目录 一、实验 1.环境 2.Kali Linux 安装docker与docker-compose 3.Kali Linux 使用docker-compose方式部署 openvas 4. KaliLinux 使用openvas 二、问题 1. 信息安全漏洞库 2.信息安全漏洞共享平台 3.Windows 更新指南与查询 4.CVE 查询 5.docker-compose 如何修改o…

前后端分离项目Docker部署指南(上)

目录 前言 一.搭建局域网 1.搭建net-ry局域网&#xff0c;用于部署若依项目 2.注意点 二.安装redis 创建目录 将容器进行挂载 ​编辑 测试是否安装成功 ​编辑 三. 安装MySQL 创建文件夹 上传配置文件并且修改 .启动MySQL容器服务 充许远程连接 四.部署后端 使用…

LLVM clang_tokenize 的示例

1&#xff0c; 环境搭建 如同上篇 git clong llvm-project git checkout llmvorg-3.4.0 # or llvmorg-18.1.rc /bin/bash ./confiure --prefix....... # or cmake Debug make -j32 make -j install 2&#xff0c; 示例代码 Makefile&#xff1a;如同上篇 LLVM_CON…

机器学习中的 K-均值聚类算法及其优缺点。

K-均值聚类算法是一种常用的无监督学习算法&#xff0c;用于将数据集划分为K个不重叠的类别。该算法基于数据点之间的距离度量&#xff0c;通过不断迭代的方式将数据点分配给最近的聚类中心&#xff0c;并更新聚类中心的位置&#xff0c;直到达到收敛条件或最大迭代次数。 K-均…

关于“定时器中断干扰串口中断,导致串口中断数据接收不完整”的问题

问题描述 最近在做的项目&#xff0c;基于modbusRTU&#xff0c;上位机通过wifi模块给单片机发数据。 上位机每隔100ms&#xff0c;周期性发送0x03和0x10。 因为要及时的处理上位机发来的指令&#xff0c;我是在一个10ms的定时器中断中进行modbus数据处理。这就导致一个问题&…

MySQL JSON 路径表达式语法

MySQL JSON 路径表达式语法 语法 MySQL中支持的许多JSON函数&#xff0c;需要路径表达式以便识别JSON文档中的特定元素。路径由路径的作用域和一个或多个路径段组成。在MySQL JSON函数中使用的路径中&#xff0c;作用域始终是正在搜索或以其他方式操作的文档&#xff0c;由前…

NOIP 2010普及组初赛试题及解析

NOIP 2010普及组初赛试题及解析 一. 单项选择题 &#xff08;共20题&#xff0c;每题1.5分&#xff0c;共计30分。每题有且仅有一个正确答案.&#xff09;。二. 问题求解&#xff08;共2题&#xff0c;每题5分&#xff0c;共计10分&#xff09;三. 阅读程序写结果&#xff08;共…

AcWing 803. 区间合并

Problem: AcWing 803. 区间合并 文章目录 思路解题方法复杂度Code 思路 这是一个区间合并的问题。我们需要找出尽可能多的不相交的区间。首先&#xff0c;我们将所有的区间按照左端点从小到大进行排序。然后&#xff0c;我们遍历所有的区间&#xff0c;如果当前区间的左端点大于…

什么是Redis?|介绍与使用及特点浅记

Redis简介 Redis&#xff08;Remote Dictionary Server&#xff09;是一种基于内存、支持持久化的键值对存储系统&#xff0c;具有丰富的数据结构和高性能的特性。它不仅可以作为数据库&#xff0c;还可以作为缓存和消息中间件使用。Redis是单线程模型&#xff0c;但利用IO多路…

【丹尼早晚安】打卡第六天,英语学习笔记

成分颜色主语&#xff08;subject&#xff09;橙色谓语&#xff08;predicate&#xff09;蓝色宾语&#xff08;object&#xff09;红色定语&#xff08;attribute&#xff09;紫色状语&#xff08;adverbial&#xff09;棕色补语&#xff08;complement&#xff09;粉色 早上…

基于YOLOv8深度学习的农作物幼苗与杂草检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

排序算法(1):直接插入排序

原文链接&#xff08;原文也是我写的哈&#xff0c;强烈推荐去原文链接看&#xff09;&#xff1a;直接插入排序 - Fucking Code 直接插入排序&#xff08;Straight Insertion Sort&#xff09;是一种最简单的排序方法&#xff0c;其基本操作是将一条记录插入到已排好的有序表中…

kafka启动命令、查看topic命令、查看消息内容命令

kafka启动命令 cd /opt/kafka/kafka_2.12-3.5.1/bin ./kafka-server-start.sh ../config/server.properties Windows环境下用kafka Tool 连不上虚拟机的broker报了unable to connect broker 0&#xff0c; 但是zookeeper可以连接上 server.properties的listeners改为listene…

006-CSS-常见问题汇总

常见问题汇总 1、伪元素与伪类2、偏门但好用的样式3、文字溢出三个点展示4、空白折叠问题5、文字的垂直居中6、 Vue项目中 在父组件中修改子组件样式7、BFC 概念7.1、兄弟元素外边距合并7.2、父子元素外边距塌陷 8、box-sizing8.1、box-sizing: border-box8.2、box-sizing: con…

Vue.js 深度解析:nextTick 原理与应用

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…