使用UDP进行文件传输的C程序

使用udp进行文件传输的c程序

数据可以在两台使用 C 语言实现 Socket 编程的计算机之间传输。

在同样的情况下,可以轻松地通过实现用户数据报协议 (UDP) 和简单的客户端/服务器。

安全性 – 通过加密处理。

协议 – UDP

加密 – 异或加密

算法

服务器启动并等待文件名。

客户端发送文件名。

该文件名由服务器接收。如果文件存在,服务器开始读取文件,并继续发送一个填充有加密文件内容的缓冲区,直到到达文件末尾。

文件结尾标记为EOF。

文件将作为缓冲区接收,直到且除非收到 EOF。之后对其进行加密。

如果文件不存在,则会发送一条消息“找不到文件”。

服务器

// server code for UDP socket programming#include #include #include #include #include #include #include #include #define IP_Protocol 0#define Port_No 15050#define Net_Buf_Size 32#define CipherKey 'S'#define SendRecvFlag 0#define NoFile "File Not Found!"// function for clearing buffervoid clearBuf(char* b1){   int i;   for (i = 0; i < Net_Buf_Size; i++)   b1[i] = '';}// function for encryption methodchar Cipher(char ch1){   return ch1 ^ CipherKey;}// function for sending fileint sendFile(FILE* fp1, char* buf1, int s1){   int i, len;   if (fp1 == NULL) {      strcpy(buf1, NoFile);      len = strlen(NoFile);      buf1[len] = EOF;      for (i = 0; i <= len; i++)      buf1[i] = Cipher(buf1[i]);      return 1;   }   char ch1, ch2;   for (i = 0; i < s1; i++) {      ch1= fgetc(fp);      ch2 = Cipher(ch1);      buf1[i] = ch2;      if (ch1 == EOF)      return 1;   }   return 0;}// driver codeint main(){   int sockfd1, nBytes;   struct sockaddr_in addr_con;   int addrlen = sizeof(addr_con);   addr_con.sin_family = AF_INET;   addr_con.sin_port = htons(Port_No);   addr_con.sin_addr.s_addr = INADDR_ANY;   char net_buf1[Net_Buf_Size];   FILE* fp1;   // socket()   sockfd1 = socket(AF_INET, SOCK_DGRAM, IP_Protocol);   if (sockfd1 < 0)      printf("

file descriptor is not received!!

"); else printf("

file descriptor %d is received

佳蓝在线销售系统(创业版) 佳蓝在线销售
佳蓝在线销售系统(创业版) 佳蓝在线销售

1、对ASP内核代码进行DLL封装,从而大大提高了用户的访问速度和安全性;2、采用后台生成HTML网页的格式,使程序访问速度得到进一步的提升;3、用户可发展下级会员并在下级购买商品时获得差额利润;4、全新模板选择功能;5、后台增加磁盘绑定功能;6、后台增加库存查询功能;7、后台增加财务统计功能;8、后台面值类型批量设定;9、后台财务曲线报表显示;10、完善订单功能;11、对所有传输的字符串进行安全

佳蓝在线销售系统(创业版) 佳蓝在线销售 0
查看详情 佳蓝在线销售系统(创业版) 佳蓝在线销售

", sockfd1); // bind() if (bind(sockfd1, (struct sockaddr*)&addr_con, sizeof(addr_con)) == 0) printf("

Successfully is binded!

"); else printf("

Binding is Failed!

"); while (1) { printf("

Waiting for name of file...

"); // receive name of file clearBuf(net_buf1); nBytes = recvfrom(sockfd1, net_buf1, Net_Buf_Size, SendRecvFlag, (struct sockaddr*)&addr_con, &addrlen); fp1 = fopen(net_buf1, "r"); printf("

File Name is Received: %s

", net_buf1); if (fp1 == NULL) printf("

File open is failed!

"); else printf("

File Successfully is opened!

"); while (1) { // process if (sendFile(fp1, net_buf1, Net_Buf_Size)) { sendto(sockfd1, net_buf1, Net_Buf_Size, SendRecvFlag, (struct sockaddr*)&addr_con, addrlen); break; } // send sendto(sockfd1, net_buf1, Net_Buf_Size, SendRecvFlag, (struct sockaddr*)&addr_con, addrlen); clearBuf(net_buf1); } if (fp1 != NULL) fclose(fp1); }return 0;}

客户端

// client code for UDP socket programming#include #include #include #include #include #include #include #include #define IP_Protocol 0#define IP_Address "127.0.0.1" // localhost#define Port_No 15050#define Net_Buf_Size 32#define CipherKey 'S'#define SendRecvFlag 0// function for clearing buffervoid clearBuf(char* b1){   int i;   for (i = 0; i < Net_Buf_Size; i++)   b1[i] = '';}// function for decryption methodchar Cipher(char ch1){   return ch1 ^ CipherKey;}// function for receiveing fileint recvFile(char* buf1, int s1){   int i;   char ch1;   for (i = 0; i < s1; i++) {      ch1 = buf1[i];      ch1 = Cipher(ch1);      if (ch1 == EOF)      return 1;      else      printf("%c", ch1);   }   return 0;}// driver codeint main(){   int sockfd1, nBytes;   struct sockaddr_in addr_con;   int addrlen = sizeof(addr_con);   addr_con.sin_family = AF_INET;   addr_con.sin_port = htons(Port_No);   addr_con.sin_addr.s_addr = inet_addr(IP_Address);   char net_buf1[Net_Buf_Size];   FILE* fp1;   // socket()   sockfd1 = socket(AF_INET, SOCK_DGRAM,   IP_Protocol);   if (sockfd1 < 0)   printf("

file descriptor is not received!!

"); else printf("

file descriptor %d is received

", sockfd1); while (1) { printf("

Please enter the name of file to receive:

"); scanf("%s", net_buf1); sendto(sockfd1, net_buf1, Net_Buf_Size, SendRecvFlag, (struct sockaddr*)&addr_con, addrlen); printf("

---------Data is Received---------

"); while (1) { // receive clearBuf(net_buf1); nBytes = recvfrom(sockfd1, net_buf1, Net_Buf_Size, SendRecvFlag, (struct sockaddr*)&addr_con, &addrlen); // process if (recvFile(net_buf1, Net_Buf_Size)) { break; } } printf("

-------------------------------

"); } return 0;}

以上就是使用UDP进行文件传输的C程序的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1445094.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 22:10:58
下一篇 2025年12月17日 22:11:10

相关推荐

  • C++程序从用户获取输入

    在任何编程语言中编写程序时,接收输入是我们几乎在所有程序中要做的基本工作。有时我们直接从控制台获取输入,有时我们从文件中获取输入。从文件中获取输入有一定的好处,因为它不需要我们一遍又一遍地输入,有时我们可以将一些好的输入测试用例保存到文件中。然而,在本文中,我们将重点关注基于控制台的输入。我们将学习…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信