Linux Linux程序练习十一(网络编程大文件发送UDP版)

news/2024/7/5 2:56:47
//网络编程发送端--大文件传输(UDP)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>int main(int arg, char * args[])
{if (arg < 3){printf("please print two param ! \n");return -1;}int port = atoi(args[2]);int st = socket(AF_INET, SOCK_DGRAM, 0);if (st == -1){printf("create socket failed ! error message :%s\n", strerror(errno));return -1;}struct sockaddr_in addr;memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET;addr.sin_port = htons(port);addr.sin_addr.s_addr = inet_addr(args[1]);char buf[1024] = { 0 };int num = 0;//open the file streamFILE *pfr = NULL;int index=0;pfr = fopen("/home/test/2/1.dat", "r");if (pfr == NULL){printf("open the file failed ! error message :%s\n", strerror(errno));goto END;}while ((num = fread(buf, sizeof(char), sizeof(buf), pfr)) > 0){if (sendto(st, buf, sizeof(char)*num, 0, (struct sockaddr *) &addr,sizeof(addr)) == -1){printf("sendto failed ! error message :%s\n", strerror(errno));break;}printf("read %d num=%d\n",index++,num);}fclose(pfr);END: close(st);return 0;
}
//网络编程接收端--大文件传输(UDP)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>int main(int arg, char *args[])
{if (arg < 2){printf("please print one param ! \n");return -1;}int port=atoi(args[1]);int st = socket(AF_INET, SOCK_DGRAM, 0);if (st == -1){printf("create socket failed ! error message:%s \n",strerror(errno));return -1;}struct sockaddr_in addr;memset(&addr,0,sizeof(addr));addr.sin_family=AF_INET;addr.sin_port=htons(port);addr.sin_addr.s_addr=htonl(INADDR_ANY);if(bind(st,(struct sockaddr *)&addr,sizeof(addr))==-1){printf("bind IP failed ! error message:%s \n",strerror(errno));goto END;}struct sockaddr_in client_addr;socklen_t client_addrlen=sizeof(client_addr);char buf[1024]={0};int num=0;int index=0;//define the file streamFILE * pfa=NULL;//open the file in append modepfa=fopen("/home/test/3/1.dat","a");if(pfa==NULL){printf("open the file failed ! error message :%s\n",strerror(errno));goto END;}while(1){memset(&client_addr,0,sizeof(client_addr));num=recvfrom(st,buf,sizeof(buf),0,(struct sockaddr *)&client_addr,&client_addrlen);if(num==-1){printf("recvform failed ! error message :%s\n",strerror(errno));break;}/*就算发送端关闭,recvfrom函数也不会返回0,而是会继续阻塞进程*//*else if(num==0){printf("the other side socket is closed !\n");break;}*/printf("recv %d num=%d\n",index++,num);fwrite(buf,sizeof(char),num,pfa);if(num<1024){printf("recv last! \n");break;}memset(buf,0,sizeof(buf));}fclose(pfa);END:close(st);return 0;
}
.SUFFIXES:.c .o
CC=gcc
SRCS1=udprecv.c
SRCS2=udpsend.c
OBJS1=$(SRCS1:.c=.o)
OBJS2=$(SRCS2:.c=.o)
EXEC1=mrecv
EXEC2=msendstart:$(OBJS1) $(OBJS2)$(CC) -o $(EXEC1) $(OBJS1)$(CC) -o $(EXEC2) $(OBJS2)@echo "-------ok-----------"
.c.o:$(CC) -Wall -g -o $@ -c $<
clean:rm -f $(OBJS1)rm -f $(EXEC1)rm -f $(OBJS2)rm -f $(EXEC2)

小结:UDP传输协议确实会出现丢包的情况,远没有TCP/IP协议来的安全,根据上图可以看出。

 

转载于:https://www.cnblogs.com/zhanggaofeng/p/5887805.html


http://lihuaxi.xjx100.cn/news/266355.html

相关文章

刚刚:2021软科世界大学学术排名发布!哈佛第一!国内有157所高校上榜!

点击上方“视学算法”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达来源 | 软科刚刚&#xff08;2021年8月15日&#xff09;&#xff0c;全球领先的高等教育评价机构软科今日正式发布“2021软科世界大学学术排名”。排名展示了全球领先的100…

算法介绍

算法介绍 算法是计算机处理信息的本质&#xff0c;因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务&#xff0c;一般的&#xff0c;当算法在处理信息时&#xff0c;会从输入设备或数据的存储地址来读取数据&#xff0c;把结果写入输出设备或某个存…

anchor-free对象检测网络CornerNet详解

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达本文转载自&#xff1a;OpenCV学堂以前的对象检测网络主要是两类对象检测方法一类是以Faster-RCNN/Mask-RCNN为代表的two-stage检测器&#xff0c;第一阶段通过RPN网络产生…

ACMNO.24 C语言-转置矩阵 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。 输入 一个3x3的矩阵 输出 转置后的矩阵 样例

题目描述 写一个函数&#xff0c;使给定的一个二维数组&#xff08;&#xff13;&#xff13;&#xff09;转置&#xff0c;即行列互换。输入 一个3x3的矩阵输出 转置后的矩阵样例输入 1 2 3 4 5 6 7 8 9样例输出 1 4 7 2 5 8 3 6 9 来源/分类 C语言 题目截图&#xff…

5G+云网融合,移动云带领开发者释放边缘计算的力量

在5G浪潮的驱动下&#xff0c;智能设备、自动驾驶、VR/AR等对于实时性、本地性有着较强需求的场景日益丰富&#xff0c;边缘计算应运而生&#xff0c;有效提升了用户体验。众所周知&#xff0c;边缘计算技术的突破&#xff0c;意味着许多控制将通过本地设备实现而无需交由云端&…

python-range用法

2019独角兽企业重金招聘Python工程师标准>>> 详细记录python的range()函数用法 转载于:https://my.oschina.net/lxwgmail/blog/135228

QT Creator 版本大全及下载地址

2019独角兽企业重金招聘Python工程师标准>>> 直接跳过输入账号&#xff0c;选择所需版本。 1.所有版本QT下载地址 &#xff1a; http://download.qt.io/archive/qt/ 2. 所有Qt Creator下载地址&#xff1a; http://download.qt.io/archive/qtcreator/ 3. 所有Qt VS开…

1.3 万亿条数据查询,如何做到毫秒级响应?

点击上方蓝色“方志朋”&#xff0c;选择“设为星标”回复“666”获取独家整理的学习资料&#xff01;知乎&#xff0c;在古典中文中意为“你知道吗&#xff1f;”&#xff0c;它是中国的 Quora&#xff0c;一个问答网站&#xff0c;其中各种问题由用户社区创建&#xff0c;回答…