网络编程555

news2024/12/25 12:59:39

上传代码

#include <stdio.h>//客户端
#include <string.h>
#include <stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<head.h>
#define PORT 69
#define IP "192.168.124.57"
int main(int argc, const char *argv[])
{
	//创建报式套接字
	int sfd=socket(AF_INET,SOCK_DGRAM,0);
	if(sfd<0)
	{
		perror("socket");
		return -1;
	}
	printf("sfd=%d\n",sfd);
	//绑定客户端的地址信息结构体到套接字上--->非必须绑定
	//若不绑定 则操作系统会给客户端绑定运行主机的ip和随机接口
	//
	//填充服务器的地址信息结构体 给sendto函数使用
	//要发给谁就填谁的地址信息
	struct sockaddr_in sin;
	sin.sin_family=AF_INET;//必须填AF_INET
	sin.sin_port=htons(PORT);//端口号 1024-49151
	sin.sin_addr.s_addr=inet_addr(IP);//服务器ip地址


	char buf[516]="";
	char ack[4]="";
	ssize_t res;
	int fp;
	short *p=(short*)buf;//操作码
	*p=htons(2); 
	char *p1=buf+2;
	strcpy(p1,"1.c");
	char *p2=p1+strlen(p1)+1;
	strcpy(p2,"octet");

	if(sendto(sfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,sizeof(sin))<0)//申请上传请求
	{
		perror("sendto");
		return -1;
	}
	//打开文件
	fp=open("./01_udpser.c",O_RDONLY);
	struct sockaddr_in cin;  //存储接收到的数据
	socklen_t addrlen=sizeof(cin);

	while(1)
	{
		res=0;
		printf("__%d__\n",__LINE__);
		socklen_t addrlen=sizeof(cin);
		bzero(buf,sizeof(buf));
		res=recvfrom(sfd,ack,sizeof(ack),0,(struct sockaddr*)&cin,&addrlen);
		printf("__%d__\n",__LINE__);
		if(res<0)
		{
			perror("recvfrom");
			return -1; 
		}
	//	sin.sin_port=cin.sin_port;//提取ack的快编号 封装buf包
	//ack
		printf("%d %d %d %d\n",ack[0],ack[1],ack[2],ack[3]);

		short *p3=(short*)buf;
		*p3=htons(3);
		short *p4=(short*)(buf+2);
		static short b=1;
		*p4=htons(b);
		b++;
		//buf[3] = ack[3] + 1;
		printf("%d\n",buf[3]);
		res=read(fp,buf+4,sizeof(buf)-4);
		printf("%ld\n",res);
		if(res<0)
		{
			perror("read");
			return -1;
		}
	//	printf("%s\n",buf+4);

		if(sendto(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,addrlen) > 0)//发送数据包
			printf("%d\n",100);
		if(res<512)
		{
			break;
		}

	}
	close(fp);
	close(sfd);

	return 0;
}


 

 

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

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

相关文章

Arduino之TFT_eSPI驱动彩色LCD屏

一、TFT_eSPI库简介 1.1 安装TFT_eSPI库 在User_Setup.h中进行个人屏幕参数的配置&#xff1a; User_Setup.hTFT驱动板备注TFT_MISO无 TFT_MOSISDA TFT_SCLKCLK TFT_CSCS液晶屏片选信号&#xff0c;低电平使能TFT_DCRS液晶屏寄存器/数据选择信号TFT_RSTRST液晶屏复位信号TF…

通达信一目均衡表指标选股公式,又称云图指标

一目均衡表&#xff08;Ichimoku Kinko Hyo&#xff0c;又称一目均衡图、云图指标&#xff09;是由日本记者兼股市专家一目山人发明的&#xff0c;被广泛用于股票、外汇、期货等金融市场的趋势分析和支撑阻力位的判断。一目均衡表提供了一种综合性的视角&#xff0c;结合了多个…

LC-相交链表(解法1)

LC-相交链表&#xff08;解法1&#xff09; 链接&#xff1a;https://leetcode.cn/problems/intersection-of-two-linked-lists/description/ 描述&#xff1a;给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在…

Linux交叉编译opencv并移植ARM端

Linux交叉编译opencv并移植ARM端 - 知乎 一、安装交叉编译器 目标平台为arm7l&#xff0c;此为32位ARM架构&#xff0c;要安装合适的编译器 sudo apt install arm-linux-gnueabihf-gcc sudo apt install arm-linux-gnueabihf-g注意&#xff1a;64位ARM架构的编译器与32位ARM架…

微服务与Nacos概述-6

RBAC 模型 RBAC 基于角色的访问控制是实施面向企业安全策略的一种有效的访问控制方式。 基本思想是&#xff0c;对系统操作的各种权限不是直接授予具体的用户&#xff0c;而是在用户集合与权限集合之间建立一个角色集合。每一种角色对应一组相应的权限。一旦用户被分配了适当…

使用 BERT 进行文本分类 (02/3)

​ 一、说明 在使用BERT&#xff08;1&#xff09;进行文本分类中&#xff0c;我向您展示了一个BERT如何标记文本的示例。在下面的文章中&#xff0c;让我们更深入地研究是否可以使用 BERT 来预测文本是使用 PyTorch 传达积极还是消极的情绪。首先&#xff0c;我们需要准备数据…

利用POM完成脚本分离实现企业级自动化(POM设计模式+页面的框架封装+测试报告截图)

利用POM完成脚本分离实现企业级自动化&#xff08;POM设计模式页面的框架封装测试报告截图&#xff09; 项目-测试-手工测试 项目-测试-手工测试 1.了解需求&#xff1b; 2.编写测试用例&#xff08;开始&#xff09;——功能测试组会去做的事情 3.执行测试用例——发送测试报…

vue中router路由的原理?两种路由模式如何实现?(vue2) -(下)

上一期我们说到了如果想要实现一个路由嵌套&#xff0c;那么就需要判断传递实例化路由时的那个路由信息是否存在children属性&#xff0c;如果有children说明它是二级路由&#xff0c;我们还需要去递归判断&#xff0c;因为它不一定只有一个子路由&#xff0c;接下来实现一下路…

【第三阶段】kotlin语言的substring

const val INFO"kotlin java" fun main() {val indexOfINFO.indexOf(j)//左包右不包//0,indexOf等价于0 until indexOf ktolin常用0 until indexOf 方式println(INFO.substring(0,indexOf))println(INFO.substring(0 until indexOf))}执行结果

Android Framework 动态更新插拔设备节点执行权限

TF卡设备节点是插上之后动态添加&#xff0c;所以不能通过初始化设备节点权限来解决&#xff0c;需要监听TF插入事件&#xff0c;在init.rc 监听插入后动态更新设备节点执行权限 添加插拔TF卡监听 frameworks/base/services/core/java/com/android/server/StorageManagerServic…

YOLOv5基础知识入门(6)— 激活函数(Mish、Sigmoid、Tanh、ReLU、Softmax、SiLU等)

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。激活函数&#xff08;Activation functions&#xff09;对于人工神经网络模型去学习、理解非常复杂和非线性的函数具有十分重要的作用。YOLOv5模型训练过程中即使用了激活函数&#xff0c;可以改善模型的训练速度和准确性。…

SpringCloud实用篇7——深入elasticsearch

目录 1 数据聚合1.1 聚合的种类1.2 DSL实现聚合1.2.1 Bucket聚合语法1.2.2 聚合结果排序1.2.3 限定聚合范围1.2.4 Metric聚合语法1.2.5.小结 1.3 RestAPI实现聚合1.3.1 API语法1.3.2 业务需求1.3.3 业务实现 2 自动补全2.1 拼音分词器2.2 自定义分词器2.3 自动补全查询2.4 实现…

vue3-router

一、路由 &#xff08;1&#xff09;通过 URL 区分路由的机制上&#xff0c;有两种实现方式&#xff1a; hash 模式&#xff1a;通过 URL 中 # 后面的内容做区分&#xff0c;我们称之为 hash-router&#xff1b; history 模式&#xff1a;在这种方式下&#xff0c;路由看起来和…

C++_模板进阶_非类型模板参数_模板特化_分离编译

一、非类型模板参数 模板参数&#xff0c;分为类型形参和非类型形参。 类型形参就是在模板中跟在typename和class之后的参数类型名称&#xff0c;非类型形参就是用一个常量作为类模板或者函数模板的一个参数&#xff0c;在类模板和函数模板中&#xff0c;可以将该参数当作常量…

第三方软件安全测评如何收费,安全测试包括哪些测试项?

近年来&#xff0c;随着全球范围内网络安全事件的频发&#xff0c;第三方软件安全测评的需求也日益增长。软件安全对于企业的重要性不言而喻&#xff0c;那么如何收费和可做测试项就成了企业最为关注的问题&#xff0c;小编将就以上问题作出以下简析。 一、第三方软件安全测评…

Smartbi 修改用户密码漏洞

漏洞简介 通过查看 Smartbi 的补丁包信息&#xff0c;发现存在漏洞在某种特定情况下修改用户的密码&#xff0c;进行简单的复现和分析 ​ 漏洞复现 在页面上修改密码时&#xff0c;需要知道原本的用户对应的密码 ​ ​ 直接构造这样的数据包&#xff0c;就不需要知道原本…

Excelize Go语言操作 Office Excel文档基础库

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库&#xff0c;基于 ECMA-376&#xff0c;ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式&#xf…

硬件-10-浏览器发展史和开源操作系统FydeOS

吊打 IE、Firefox&#xff0c;谷歌 Chrome 十年发展史 fydeos官方网站 全面了解浏览器内核发展史 1 浏览器内核 浏览器内核英文叫做&#xff1a;Rendering Engine&#xff0c;中文翻译很多&#xff0c;排版引擎、解释引擎、渲染引擎&#xff0c;现在流行称为浏览器内核。内核…

42、可靠传输——连续ARQ

上回内容我们学习到&#xff0c;一种保证可靠传输的机制——ARQ协议&#xff0c;ARQ协议通过设置超时定时器&#xff0c;当在规定时间内没有收到来自对方发来的“确认”报文&#xff0c;就自动报文重传。这其中&#xff0c;ARQ协议和停止等待机制的结合&#xff0c;我们把它称作…

USB PD快充保护方案有哪些?用集成式TVS还是分立式TVS?

USB Power Delivery &#xff0c;简称USB PD&#xff0c;是由USB-IF组织制定的一种快速充电规范&#xff0c;目前主流的快充协议之一。该规范可实现更高的电压和电流&#xff0c;输送的功率最高可达100瓦&#xff0c;并可以自由的改变电力的输送方向。在日常使用USB PD快充充电…