Linux中服务端开发

news2024/12/25 13:32:31

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));//初始化置0
	addr.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.coloradmin.cn/o/1490922.html

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

相关文章

证明高维度神经网络模型是低纬度神经网络模型的加和

神经网络中矩阵乘法的分解与应用 启发标题&#xff1a;神经网络中矩阵乘法的分解与应用摘要&#xff1a;引言&#xff1a;方法&#xff1a;实验&#xff1a;结论&#xff1a;参考文献&#xff1a;附录1附录2实验数据 启发 理论上 更具矩阵乘法 A[p,mn]B[mn,q]C[p,q] Acat(A[:,…

ChatGPT 4.0 升级指南

1.ChatGPT 是什么&#xff1f; ChatGPT 是由 OpenAI 开发的一种基于人工智能的聊天机器人&#xff0c;它基于强大的语言处理模型 GPT&#xff08;Generative Pre-trained Transformer&#xff09;构建。它能够理解人类语言&#xff0c;可以为我们解决实际的问题。 1.模型规模…

K8S实现零宕机实践

越来越多的大厂都在上云、上容器、上K8S编排&#xff0c;K8S和容器云确实帮助我们解决了很多问题。但是&#xff0c;带来方便的同时&#xff0c;也让我们的架构变得更复杂了&#xff0c;更难于依靠“老经验”来解决问题了。虽然我们不用再费力考虑一层的问题&#xff0c;怎么实…

《低代码平台开发实践:基于React》读书心得与实战体验

低代码平台开发实践标题 &#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 &#x1f4d8; 一、引…

【EI会议征稿通知】第七届交通运输与土木建筑国际学术论坛(ISTTCA 2024)

第七届交通运输与土木建筑国际学术论坛&#xff08;ISTTCA 2024&#xff09; 2024 7th International Symposium on Traffic Transportation and Civil Architecture 交通运输是经济发展的先行官&#xff0c;而岩土是发展交通运输网络无法避开的话题。将传统的土木工程技术与先…

Linux 设置快捷命令

以ll命令为例&#xff1a; 在 Linux 系统上&#xff0c;ll 命令通常不是一个独立的程序&#xff0c;而是 ls 命令的一个别名。 这个别名通常在用户的 shell 配置文件中定义&#xff0c;比如 .bashrc 或 .bash_aliases 文件中。 要在 Debian 上启用 ll 命令&#xff0c;你可以按…

Hello World!第一个labview程序

软件版本&#xff1a; labview myrio 2021英文版 因为没有找到中文版的&#xff0c;据说是myrio没有中文版本 实验内容&#xff1a; 文本显示&#xff0c;程序界面输入任意文本&#xff0c;然后运行程序 在前面板显示出输入的文本 以下为具体步骤&#xff1a; 第一步&…

Linux常用命令(超详细)

一、基本命令 1.1 关机和重启 关机 shutdown -h now 立刻关机 shutdown -h 5 5分钟后关机 poweroff 立刻关机 重启 shutdown -r now 立刻重启 shutdown -r 5 5分钟后重启 reboot 立刻重启 1.2 帮助命令 –help命令 shutdown --help&#xff1a; ifconfig --help&#xff1a;查看…

【软件使用】Markdown编辑器第一次使用介绍

【软件使用】Markdown编辑器第一次使用介绍 markdown格式支持的软件有&#xff1a;VS Code 和 Typora&#xff0c;CSDN写网页博文也是用的.md&#xff0c;CSDN能支持导入的文件也是以.md格式结尾的文件名。 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markd…

opencv官网 Blob检测

参考&#xff1a;Blob Detection Using OpenCV ( Python, C ) Bolob检测 Blob 是图像中一组连接的像素&#xff0c;它们共享一些共同属性&#xff08;例如&#xff0c;灰度值&#xff09;。在上图中&#xff0c;深色连接区域是 Blob&#xff0c;Blob 检测旨在识别和标记这些区…

基于51单片机风速仪风速测量台风预警数码管显示

基于51单片机风速仪风速测量报警数码管显示 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真4. 程序代码5. 设计报告6. 设计资料内容清单&&下载链接资料下载链接&#xff1a; 基于51单片机风速仪风速测量报警数码管显示( proteus仿真程序设计报告讲解视频&…

CRM客户体验建设三剑客:构建旅程的必备策略

在企业越来越重视客户体验的今天&#xff0c;客户体验建设包含客户认知、客户旅程设置、NPS客户满意度调查三大版块&#xff0c;在工具上分别对应Zoho CRM的路径探查器、旅程构建器和NPS。上期介绍了路径探查器的作用和价值&#xff0c;本文将围绕客户旅程构建展开&#xff0c;…

Vue 3的Composition API和vue2的不同之处

Vue 3的Composition API是Vue.js框架的一个重要更新&#xff0c;它提供了一种新的组件逻辑组织和复用方式。在Vue 2中&#xff0c;我们通常使用Options API&#xff08;data、methods、computed等&#xff09;来组织组件的逻辑&#xff0c;但这种组织方式在处理复杂组件时可能会…

前端面试题 ===> 【JavaScript - 高级】

公众号&#xff1a;需要以下pdf&#xff0c;关注下方 2023已经过完了&#xff0c;让我们来把今年的面试题统计号&#xff0c;来备战今年的金三银四&#xff01;所以&#xff0c;不管你是社招还是校招&#xff0c;下面这份前端面试工程师高频面试题&#xff0c;请收好。 JavaScr…

LED照明恒流驱动芯片特点解析与SM16306推荐

LED恒流驱动芯片 是一种电子芯片&#xff0c;用于控制和驱动LED灯&#xff0c;以保持电流恒定&#xff0c;从而使LED灯能够稳定工作。这种芯片具有多种功能&#xff0c;包括电源管理、过流保护和温度调节等。 在LED照明系统中&#xff0c;恒流驱动芯片是非常重要的组成部分。由…

32单片机基础:TIM输入捕获

指定的电平跳变&#xff0c;就是上升沿或者下降沿&#xff0c;可以通过程序设置 PWMI模式&#xff0c;就是PWM的输入模式&#xff0c;是专门为测量PWM频率和占空比设计的&#xff0c; 可配合主从触发模式 这两个功能结合起来&#xff0c;测量频率占空比就是硬件全自动运行的…

奥维云网权威发布 智能水洗集成灶是第四代集成灶

近日&#xff0c;奥维云网权威发布了《2024智能水洗蒸烤集成灶行业发展趋势白皮书》&#xff0c;自此&#xff0c;集成灶行业产品正式进入4.0水洗蒸烤时代&#xff01; 冠军实力助力行业迭新换代 据《2024智能水洗蒸烤集成灶行业发展趋势白皮书》分析&#xff0c;国内集成灶产…

【Linux实践室】Linux常用命令

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 &#x1f514;Linux文件操作2.1.1 &#x1f47b;创建文件2…

Java对接快递100实时快递单号查询API接口

目录 1.引入依赖 2.定义配置信息 3.模块结构 4.Controller 5.Service实现类 6.返回数据dto以及dto中的数据dto 7.测试运行 今天也是接到了这个任务&#xff0c;官网有小demo&#xff0c;可以下载下来参考test中代码 官方文档地址&#xff1a; 实时快递查询接口技术文档…

探索Python编程世界:从入门到精通

一.Python 从入门到精通 随着计算机科学的发展&#xff0c;编程已经成为了一种必备的技能。而 Python 作为一种简单易学、功能强大的编程语言&#xff0c;越来越受到人们的喜爱。本文将为初学者介绍 Python 编程的基础知识&#xff0c;帮助他们踏入 Python 编程的大门&#xf…