网络编程(0816-林雪阵)

2023-05-16

完成seclect  TCP客户端

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <string.h>
#include <unistd.h>
#include <sys/select.h>


//打印错误信息宏函数
#define ERR_MSG(msg) do{\
	fprintf(stderr,"__%d__",__LINE__);\
	perror(msg);\
}while(0)

//服务器IP和端口号
#define PORT 8888               //1024~49151
#define IP "192.168.31.72"    //服务器IP  ifconfig查看


int main(int argc, const char *argv[])
{
	//创建流式套接字
	int sfd=socket(AF_INET,SOCK_STREAM,0);
	if(sfd<0)
	{
		ERR_MSG("socket");
		return -1;
	}
	printf("create socket success\n");

	//允许端口快速复用
	int reuse=1;
	if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
	{
		ERR_MSG("setsockopt");
		return -1;
	}
	printf("setsockopt success\n");
	//绑定客户端信息结构体
	
	//填充要连接的服务器的地址信息结构体‘
	struct sockaddr_in sin;
	sin.sin_family       = AF_INET;
	sin.sin_port         = htons(PORT);
	sin.sin_addr.s_addr  = inet_addr(IP);
	//连接服务器
	
	if(connect(sfd,(struct sockaddr*)&sin,sizeof(sin))<0)
	{
		ERR_MSG("connect");
		return -1;
	}

	//创建一个读集合
	fd_set readfds,tempfds;

	//将读集合清空
	FD_ZERO(&readfds);

	//将0号文件描述符添加到集合
	FD_SET(0,&readfds);
	FD_SET(sfd,&readfds);

	//定义最大文件描述符
	int maxfd = sfd;
	int select_res=0;

	ssize_t res=0;
	char buf[128]="";

	while(1)
	{
		tempfds=readfds;

		select_res=select(maxfd+1,&tempfds,NULL,NULL,NULL);
		if(select_res <0)
		{                                                     
			ERR_MSG("select");
			return -1;
		}else if(0== select_res)
		{
			fprintf(stderr,"seect time out\n");
			break;
		}

		for(int i=0;i<=maxfd;i++)
		{
			if(FD_ISSET(i,&tempfds)==0)
			{
				continue;
			}

			if(i==0)
			{
				//触发键盘输入事件
				bzero(buf,sizeof(buf));
				printf("请输入要发送的数据\n");
				fgets(buf,sizeof(buf),stdin);
				buf[strlen(buf)-1]=0;

				//printf("buf=%s\n",buf);
				if(send(sfd,buf,sizeof(buf),0)<0)
				{
					ERR_MSG("send");
					return -1;
				}
			}else if(sfd ==i)
			{
				bzero(buf,sizeof(buf));
				res=recv(sfd,buf,sizeof(buf),0);
				if(res<0)
				{
					ERR_MSG("recv");
					return -1;
				}else if(res==0)
				{
					printf("服务器关闭\n");
					break;
				}
				printf("%d %s\n",i,buf);
			}
		}
	}
	close(sfd);

	return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网络编程(0816-林雪阵) 的相关文章

  • gazebo 中创建含有二维码的墙的模型

    1 新建空白墙的模型 在gazebo中添加一个Edit gt Building Editor xff0c 生成sdf文件 xff0c 放在 gazebo models文件夹下 如图Untitled1 编辑model sdf文件 xff0c
  • 在vscode中开发arduino编译巨慢解决办法

    每次在vscode中 编译Arduino花费的时间巨长 xff0c 等的好烦 xff0c 仔细一看每次在Arduino 输出控制台上会出现一个警告 Warning Output path is not specified Unable to
  • 工作空间中的devel和build文件夹可以删掉

    工作空间中的devel和build文件夹可以删掉 xff0c 再cmake就可以产生
  • IOT的核心—无线通讯模块

    文章目录 前言一 IOT是什么 xff1f 1 IOT的运用 1 智能家居 2 无线控制 2 IOT总结 三 如何从互联网转换为物联网简述芯百特的CB2401与CB2402 1 CB2401介绍内部结构与管脚图产品应用评估板原理图 2 CB
  • STM32F103C8T6 串口3(USART3) 只能发不能收

    问题原因 xff1a 今天因为上述问题 困扰一天 xff01 最后发现是 PB8 9 xff08 配置输出 xff09 硬件短路了 xff01 问题现象 xff1a STM32F103C8T6 串口3 USART3 只能发不能收 xff01
  • eNSP第四篇:IP地址,逻辑接口,接口类型,三层路由接口,二层路由接口

    IP地址 xff0c 逻辑接口 xff0c 接口类型 xff0c 三层路由接口 xff0c 二层路由接口 私有IP地址的范围 IP范围 默认掩码 A类 10 0 0 0 10 255 255 255 255 0 0 0 B类 172 16
  • IMU及磁力计AHRS系统控制(一):传感器物理实现原理

    AHRS系统前言 AHRS是 Attitude and heading reference system 的英文缩写 xff0c 百度对此的解释是 航姿参考系统 xff0c 按笔者比较浅薄的理解就是在计算平台上通过算法处理一套部署在被控对象
  • 归并排序(C语言)详解

    记录学习第五天 今天记录一下归并排序 xff0c 因为在csdn里面没有找到特别清楚的解析 xff0c 所以想自己写的认真一点 xff0c 也查阅了一些资料 xff0c 通过这篇博客记录一下 xff1b 归并排序 xff0c 光看字面 xf
  • HTML的块级元素(常用整理)

    emmm xff0c 最近想整理复习一下前端的基础 xff0c 最开始的HTML想了好久也没想好怎么写 xff0c 最后也是决定以行块这样整理 xff0c 再在后面补充吧 说到HTML xff0c 什么是HTML呢 xff1f 什么是 HT
  • JS实现快速排序(代码+讲解)

    OK xff0c 排序这一个篇章也快要结束了 这一篇主要说的是快速排序 xff0c 说的方式主要还是先说原理 xff0c 然后再用代码来进行实现 所谓快速排序 xff0c 就是分为三步走 xff1a 第一步 xff1a 选择第一个数字分离出
  • Object.defineProperty方法(详解)

    OK xff0c 这一篇主要想说一下Object defineProperty这个方法 这个方法也是Vue数据双向绑定原理的常见面试题 所以也是有必要好好掌握的哦 首先我们知道JS中是支持面向对象编程的 xff0c 也是有着对象和类这样的概
  • 原生JS实现Promise(详解)

    摘要 首先呢 xff0c Promise是异步中比较重要的知识点 xff0c 学习的最好方法就是掌握它的基本原理 所以这一篇主要说一下如何用JS来实现一个自己的promise 构造函数 首先我们来看一下我们是如何使用promise的 xff
  • 解决winscp连接ubuntu虚拟机连续超时

    1 禁用虚拟机网络 在windows系统找到网络适配器 xff0c 禁用VMnet1和VMnet8 2 更改网络连接模式并测试网络是否连通 菜单栏 虚拟机 设置 网络适配器 xff0c 将网络模式改为桥接模式 xff0c 勾选 复制物理网络
  • Http的各种请求方法(详解)

    摘要 我们知道 xff0c 当我们访问各种网页的时候 xff0c 之所以能够看到页面 xff0c 根本原因是发送了http请求然后得到了响应 xff0c 从而页面才会弹出来 再或者我们上传一些照片和视频时 xff0c 之所以可以上传成功也是
  • React中ref的使用方法和使用场景(详解)

    摘要 不管在Vue中还是React xff0c 如果我们想使用一个元素的DOM xff0c 不需要通过JS中操纵DOM的方法 xff0c 它们提供了一个专属的API就是ref 而Vue中的ref可能比较简单 xff0c 这一篇主要讲一下如何
  • 原生JS的拖拽属性draggable(详解)

    摘要 作为h5新增的属性draggable xff0c 它能够给与一切的html元素拖动的效果 而在这个属性之下 xff0c 也有着关于拖动效果的各个方法 而这一篇文章 xff0c 主要就是说一下关于draggable属性的使用以及工作场景
  • 一篇搞定JS的位运算(公式+力扣真题)--- 持续更新

    摘要 位操作 xff08 Bit Manipulation xff09 是程序设计中对位模式或二进制数的一元和二元操作 在许多古老的微处理器上 xff0c 位运算比加减运算略快 xff0c 通常位运算比乘除法运算要快很多 在现代编程语言中
  • 【C++实现HTTP服务器项目记录】HTTP报文处理

    文章目录 一 HTTP报文格式1 请求报文2 响应报文 二 解析HTTP请求报文1 有限状态机2 状态转换图3 代码实现 三 生成HTTP响应报文1 代码实现 四 内存映射五 获取文件属性六 高级I O1 聚集写2 解决大文件传输问题 一
  • 使用PX4 模拟无人机起降 jmavsim或Gazebo环境下

    安装PX4的教程较多 xff0c 可在linux xff0c macos windows上进行安装 推荐Linux 笔者使用的是Ubuntu20 04 原因如下图 xff1a 安装好PX4后 cd到PX4安装目录 xff0c 启动仿真器 x
  • C++标准库--IO类库

    文章目录 前言一 IO类二 文件输入输出1 fstream的操作2 文件模式 三 String流 前言 C 43 43 语言本身没有输入输出 xff0c 而是通过定义在标准库中的类型来处理IO xff0c 这些类型支持从文件 xff0c 控

随机推荐

  • 总线协议一(UART/RS232/RS485/IIC/SPI)

    目录 基础概述 xff1a 一 UART xff08 为串口通信方式 xff09 二 RS232协议 三 RS485协议 四 I2C总线协议 五 SPI总线 六 I2C和SPI的区别 基础概述 xff1a 总线的本质就是一根导线 xff0c
  • HTTP协议分析(完整版)

    HTTP协议 一 http协议简介二 http工作原理1 客户端连接到Web服务器2 发送HTTP请求3 服务器接受请求并返回HTTP响应4 释放连接TCP连接5 客户端浏览器解析HTML内容 三 http请求方法四 http状态码1 状态
  • 【linux网络编程】-UDP客户端

    客户端实现 1 注 xff1a 客户端实现中可以不用bind地址 xff0c 当你发送数据到指定服务端时 xff0c 操作系统会为客户端自动分配端口 span class token keyword int span span class
  • 删除字符串中的各种标点符号的方法

    1 用re findall w 43 string 匹配字母 xff0c 数字和下划线 xff0c 返回列表 2 用 join 列表 将列表中元素再拼接成字符串
  • 在ubuntu18.04中切换python版本(个人记录)

    首先通过ls命令查一下目前ubuntu系统中已安装的python版本 ls l usr bin grep python 然后通过以下命令查看目前有哪些可供选择的python版本 update alternatives list python
  • ORB-SLAM2建立自己的数据集

    ORB SLAM2建立自己的数据集 使用ZED2拍摄视频剪裁视频分割图片运行数据集记录 使用ZED2拍摄视频 这里没有使用程序将ZED2双目相机拍摄成两幅画面 xff0c 而是直接使用软件拍摄视频 若有大佬有相关代码还是很希望能发我下 拍的
  • STM32—DMA功能讲解串口发送

    目录 一 DMA基本介绍 1 DMA的定义 2 DMA数据传输 二 DMA功能框图 编辑 1 DMA请求 2 通道 3 仲裁器 三 DMA数据配置 1 传输方向及地址 2 传输数据大小及单位 3 传输完成 三 DMA初始化结构体详解 1 D
  • 最新 Xilinx vivado IP许可申请

    最新 Xilinx vivado IP许可申请 xilinx的fpga使用vivado开发 xff0c zynq系列fpga的SOC开发成为主流 xff0c 加快fpga开发 xff0c 也进一步提高了fpga开发的灵活性 xilinx提供
  • C++调用Yolov3模型实现目标检测

    C 43 43 调用Yolov3模型实现目标检测 使用开源权重文件 xff0c 此训练模型包含80种物体 文件下载地址 xff1a 预训练权重文件 xff1a https pjreddie com media files yolov3 we
  • 无人驾驶-控制-坐标系转化

    无人驾驶 坐标系转化 一 坐标系概念1 1 WGS 84坐标系1 1 1 简介1 1 2 角度范围1 1 3 基本参数1 1 4 坐标系图示 1 2 ECEF地心坐标系1 2 1 简介1 2 2 坐标系图解 1 3 ENU东北天坐标系1 3
  • 几何实体图形保存成stl格式的ascII和二进制文。用Vc++语言读入文件,给三角网格坐标值乘以2,并保存到另一stl文件。输出完成工作所用的执行时间

    1 题目 xff1a CAD CAM软件生成几何实体图形 xff0c 图形形状不限 xff0c 但图形需包含曲面 xff0c 分别保存成stl格式的ascII和二进制文 用Vc 43 43 语言读入文件 xff0c 给所有三角网格坐标值乘以
  • windows下vscode连接Linux中的MySQL(非常实用)

    于初学Linux系统的小伙伴来说 xff0c 由于对Linux系统及其在windows下的环境配置比较生疏 xff0c 所以当使用windows下vscode连接Linux中的MySQL xff0c 并进行相关研发时 xff0c 颇为头疼
  • UDP通信实现(客户端和服务器端)

    服务器端 xff1a include lt stdio h gt include lt stdlib h gt include lt unistd h gt include lt string h gt include lt arpa in
  • conda环境的激活与关闭

    激活conda环境 conda activate 关闭conda环境 conda deactivate 打开终端自动进入conda环境 conda config set auto activate base true 关闭打开终端自动进入c
  • C语言结构体字节对齐规则

    注 xff1a 图片中蓝色圆圈表示空闲的字节空间 xff0c 黄色表示成员占有的字节空间 编译器一般默认4字节对齐 xff0c 当然也有8字节对齐的 xff0c 但是如果结构体没有使用8字节的数据类型 xff0c 其实也可以认为是4字节对齐
  • c语言输出对齐的方法

    关于c语言输出对其方法 左对齐右对齐附乘法表代码 左对齐 当输出多个数据时 xff0c 由于每个数据的字符长度不同 xff0c 所以需要对齐 xff0c 左对齐时方法如下 xff1a span class token function pr
  • 多线程与网络编程

    一 网络协议 应用层 HTTP FTP TFTP SMTP SNMP DNS 传输层 TCP UDP 网络层 ICMP IGMP IP ARP RARP 数据链路层 由底层网络定义的协议 物理层 由底层网络定义的协议 二 TCP与UDP x
  • const和define区别与比较

    xff08 1 xff09 就起作用的阶段而言 xff1a define是在编译的预处理阶段起作用 xff0c 而const是在编译 运行的时候起作用 xff08 2 xff09 就起作用的方式而言 xff1a define只是简单的字符替
  • FreeRTOS中任务栈内存分配

    前言 在RAM中大多数的空间分配为任务栈和系统栈两部分 任务栈 xff1a 顾名思义就是用来跑任务的 xff0c 当我们xTaskCreate一个任务时 xff0c 但是在这块任务栈里面动态分配空间 系统栈 xff1a 任务栈是不使用这里的
  • 网络编程(0816-林雪阵)

    完成seclect TCP客户端 include lt stdio h gt include lt sys types h gt include lt sys socket h gt include lt arpa inet h gt in