Linux编程4.8 网络编程-建立连接

news2024/11/16 20:24:51

1、服务器端


  #include <sys/types.h>       
  #include <sys/socket.h>

  int listen(int sockfd, int backlog);
  返回:成功返回0,出错返回-1。
  参数:
		sockfd:套接字的文件描述符
		backlog:定义了sockfd的挂起连接队列可能增长的最大长度。

  int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
  参数:
		sockfd:套接字的文件描述符。
		addr:指向sockaddr结构的指针。这个结构是用通信层已知的对等套接字的地址填充的。
		addrlen:结果参数,返回时,它将包含对等地址的实际大小。

示例:
在这里插入图片描述

2、客户端

#include <sys/socket.h>
  int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
  
  返回:成功返回0,出错返回-1。
  功能:系统调用将文件描述符sockfd引用的套接字连接到addr指定的地址。
  参数:
	addrlen:指定addr的大小。
	addr:要连接的服务器地址,其中地址的格式由套接字sockfd的地址空间决定

示例:
在这里插入图片描述

3、服务器完整示例

nt main(void)
{
	//1. 创建套接字
	int serverfd = socket(AF_INET, SOCK_STREAM, 0);
	if(serverfd < 0){
		perror("创建套接字失败");
		exit(1);
	}

	//2. 绑定套接字
	struct sockaddr_in addr;
	memset(&addr, 0, sizeof(addr));
	addr.sin_family = AF_INET;
	addr.sin_port = htons(PORT);
	addr.sin_addr.s_addr = INADDR_ANY;

	if(bind(serverfd, (struct sockadr*)&addr, sizeof(addr)) < 0){
		perror("绑定套接字失败");
		exit(1);
	}

	//3. 监听
	if(listen(serverfd, 5) < 0){
		perror("监听套接字失败");
		exit(1);
	}

	struct sockaddr_int client_addr;
	socklen_t client_len = sizeof(client_addr);

	fd_set fds, tds;
	FD_ZERO(&fds);
	FD_SET(serverfd, &fds);

	//4. 接受
	while(1){
		tds = fds;
		//使用select同时监听serverfd与其他若干clientfd,
		int ret = select(FD_SETSIZE, &tds, NULL, NULL, NULL);
		if(ret < 0){
			perror("");
			exit(1);
		}else if(ret > 0){
			//准备好了
			int i = 0, j = 0;
			for(i = 3; i < FD_SETSIZE && j < ret; i++){
				if(FD_ISSET(i, &tds)){
					//有东西可读
					j++;

					if(i == serverfd){
						//需要accept
						int clientfd = 0;
						if((clientfd = accept(serverfd, (struct sockaddr*)&client_addr, &client_len)) < 0){
							perror("");
							exit(1);
						}else{
							//接受成功
							printf("新的连接:ip:%s port:%d\n", inet_ntop(client_addr.sin_addr.s_addr), ntohs(client_addr.sin_port));
							FD_SET(clientfd, &fds);
						}
					}else{
						char str[1024] = "";
						//客户端读取
						if(read(i, str, sizeof(str)) == 0){
							//套接字关闭
							FD_CLR(i, &fds);
							close(i);
						}else{
							//switch(){}
						}
					}
					
				}
			}
		}else{}
	}

	return 0;
}

4、客户端完整示例

int main(void)
{
	//1. 创建套接字
	client_sockfd = socket(AF_INET, SOCK_STREAM, 0);
	if(client_sockfd < 0){
		perror("");
		exit(1);
	}

	//2. 连接
	struct sockaddr_in addr;
	memset(&addr, 0, sizeof(addr));
	addr.sin_family = AF_INET;
	inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);
	addr.sin_port = htons(12000);

	if(connect(client_sockfd, (struct sockaddr*)&addr, sizeof(addr)) < 0){
		perror("");
		exit(1);
	}

	pthread_t pid;
	pthread_attr_t attr;	
	pthread_attr_init(&attr);
	pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

	pthread_create(&pid, &attr, pthread_recv, &client_sockfd);

	main_menu();//	循环

	close(client_sockfd);

	return 0;
}

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

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

相关文章

使用 ZipArchiveInputStream 读取压缩包内文件总数

读取压缩包内文件总数 简介 ZipArchiveInputStream 是 Apache Commons Compress 库中的一个类&#xff0c;用于读取 ZIP 格式的压缩文件。在处理 ZIP 文件时&#xff0c;编码格式是一个重要的问题&#xff0c;因为它决定了如何解释文件中的字符数据。通常情况下&#xff0c;Z…

【新手】win10安装nodejs V16.9.0详细教程

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

【数据挖掘】练习2:数据管理1

课后作业2&#xff1a;数据管理1 一&#xff1a;上机实验1 # 读入数据 data("CO2") # 查看数据集CO2中的变量名称&#xff0c;并将变量Treatment的名称更改为Treat names(CO2) names(CO2)[names(CO2) "Treatment"] <- "Treat" names(CO2)…

在AI创业热潮下,如何抓住AI赚钱机会,实现人生逆袭

随着人工智能技术的迅猛发展,AI创业热潮正席卷全球。这不仅为科技领域的专业人士提供了无限的商机,也为普通人开辟了全新的赚钱途径。本文将为您揭示在AI创业热潮下,普通人如何抓住AI赚钱机会,实现人生逆袭,同时探讨哪些行业适合应用AI技术。 一、普通人如何抓住AI赚钱机…

WanAndroid(鸿蒙版)开发的第四篇

前言 DevEco Studio版本&#xff1a;4.0.0.600 WanAndroid的API链接&#xff1a;玩Android 开放API-玩Android - wanandroid.com 其他篇文章参考&#xff1a; 1、WanAndroid(鸿蒙版)开发的第一篇 2、WanAndroid(鸿蒙版)开发的第二篇 3、WanAndroid(鸿蒙版)开发的第三篇 …

共谋企业出海新篇章纷享销客荣获数字中国企业峰会“卓越成果奖”

3月9日&#xff0c;2024数字中国企业峰会在杭州西湖中维香溢大酒店成功举办&#xff0c;众多数字化领域专家、知名企业 CIO 代表到场。峰会旨在推动数字化转型与创新发展&#xff0c;为企业出海和国际合作搭建交流与合作的平台。本次峰会的颁奖环节&#xff0c;纷享销客凭借其卓…

c++的const总结(转)

为什么使用const&#xff1f;采用符号常量写出的代码更容易维护&#xff1b;指针常常是边读边移动&#xff0c;而不是边写边移动&#xff1b;许多函数参数是只读不写的。const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替)&#xff0c;分类如下&#xff1a;…

二类医疗器械经营备案怎么办?怎么办理?二类的有效期多久?

第二类医疗器械工商登记怎么办&#xff1f; 这就是本文的主要内容。 下面&#xff0c;我们给大家分享一下第二类医疗器械工商登记的要求和材料。 经营第二类医疗器械只需到当地药品监督管理部门办理工商登记即可。 那么第二类医疗器械注册时应该怎么做呢&#xff1f; 第二类医疗…

计算机毕业设计 | vue+springboot 在线花店后台管理系统(附源码)

1&#xff0c;绪论 1.1 项目背景 随着社会发展&#xff0c;网上购物已经成为我们日常生活的一部分。但是&#xff0c;至今为止大部分电商平台都是从人们日常生活出发&#xff0c;出售都是一些日常用品比如&#xff1a;食物、服装等等&#xff0c;并未发现一个专注于鲜花的电商…

Linux:搭建ntp服务器

我准备两个centos7服务器 一个为主服务器连接着外网&#xff0c;并且搭建了ntp服务给其他主机同步 另外一个没有连接外网&#xff0c;通过第一台设备去同步时间 首先两个服务器都要安装ntp软件 yum -y install ntp 再把他俩的时间都改成别的 左侧的是主服务器&#xff0c;主…

docker安装Milvus

docker安装Milvus 拉去CPU版本的milvus镜像 $ sudo docker pull milvusdb/milvus:0.10.0-cpu-d061620-5f3c00 docker pull milvusdb/milvus:0.10.0-cpu-d061620-5f3c00 mkdir -p milvus/conf cd milvus/conf ls wget https://raw.githubusercontent.com/milvus-io/milvus/v0.1…

“有主权国家秘密买入比特币”!1900亿基金准备进场!卡塔尔国家主权基金也要出手了?

近期暴涨的两大"造富神话"——黄金、比特币&#xff0c;双双下跌。上周五&#xff0c;国际金价小幅下跌&#xff0c;这是近四周以来&#xff0c;黄金首次录得周下跌。比特币日内最大跌幅超6%&#xff0c;价格一度跌破65000美元&#xff0c;打破了此前多天的上涨氛围。…

离职率太高怎么分析?看BI工具如何有效降低员工离职率

近年来&#xff0c;随着全球经济形势的动荡和人才市场竞争的加剧&#xff0c;离职率已成为企业管理和人力资源领域备受瞩目的焦点议题。离职率的高低不仅直接影响着企业的运营和稳定&#xff0c;同时也反映了员工对工作环境、职业发展和福利待遇的认可程度。 因此&#xff0c;企…

nodejs实现链接shp的属性信息(替换字段或者追加字段)

写在前面 偶尔听到同事说一个数据处理重复性的流程太多&#xff0c;就了解了下&#xff0c;原来是1份shp数据对应着一个xls属性文件&#xff0c;需要把xls文件里的一部分属性更新到shp的相关字段中&#xff0c;当然这种操作是可以用ArcGIS或者QGIS实现&#xff0c;但是当数据特…

鸿蒙-项目创建及了解

目录 项目创建 1.App普通项目创建 2.元服务创建 项目结构 .hvigor .idea AppScope entry EntryAbility.ts pages resources module.json5 ohosTest hvigorfile.ts build-profile.json5 oh_modules build-profile.json5 hvigorfile.ts 项目运行 项目创建 F…

vue3+ts+element-plus实际开发之统一掉用弹窗封装

vue3tselement-plus实际开发之统一掉用弹窗封装 插槽1. 官网介绍先理解 插槽、具名插槽、 作用域插槽、动态插槽名、具名作用域插槽属性和使用方法 2. 统一调用弹窗封装dome实战- 使用场景&#xff1a;- 对el-dialog进行数据动态设置- 新建一个ts文件用于统一存放组件&#xff…

Windows系统安装配置Everything结合内网穿透实现公网环境搜索本地文件

文章目录 前言1.软件安装完成后&#xff0c;打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前言 要搭建一个在线资料库&#xff0c;我们需要两个软件的支持&#xff0c;分别是cpolar&#xff08;用于搭建内网穿透数据隧道…

2024年5月软考初级《信息处理技术员》报名考试全流程梳理

2024年软考信息处理技术员考试报名时间节点&#xff1a; 报名时间&#xff1a;上半年3月18日到4月15日&#xff0c;下半年8月19日到9月15日&#xff08;各地区报名时间不同&#xff0c;具体日期见官方通告&#xff09; 准考证打印时间&#xff1a;上半年5月20日起&#xff0c…

项目文章|真菌ChIP-seq+RNA-seq解析脱落酸生物合成的调控机制

组蛋白翻译后修饰是表观遗传调控的主要机制之一&#xff0c;已被证明在基因表达的调控中发挥重要作用&#xff0c;参与真菌发育、感染相关的形态发生、环境应激反应、次级代谢产物的生物合成和致病性。我们分享过不少真菌组蛋白修饰的文章&#xff0c;今天接着带来一篇利用ChIP…

uniapp使用Echarts图表H5显示正常 打包app显示异常

uniapp使用Echarts在H5页面调试 调试完在H5正常显示 然后通过安卓机调试的时候 发现直接空白了 还有这个爆错 Initialize failed: invalid dom 我有多个图表、图表是通过v-for循环出来的 解决方案 原来是yarn直接安装Echarts 然后改成本地JS文件引入 gitbub文件地址 — dist/…