Linux Linux程序练习十(网络编程大文件发送)
//网络编程客户端--大文件传输 #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<4){printf("please print three param !\n");return -1;}int port=atoi(args[2]);//create socketint st=socket(AF_INET,SOCK_STREAM,0);if(st==-1){printf("create socket failed ! error message :%s\n",strerror(errno));return -1;}//defien IP addressstruct sockaddr_in addr;//init addrmemset(&addr,0,sizeof(addr));addr.sin_family=AF_INET;addr.sin_port=htons(port);addr.sin_addr.s_addr=inet_addr(args[1]);if(connect(st,(struct sockaddr *)&addr,sizeof(addr))==-1){printf("connect failed ! error message :%s\n",strerror(errno));goto END;}//send file//define file streamFILE * pfr=NULL;//open the file in read modepfr=fopen(args[3],"r");if(pfr==NULL){printf("open the file failed !error message :%s\n",strerror(errno));goto END;}char buf[1024]={0};size_t num=0;while((num=fread(buf,sizeof(char),sizeof(buf),pfr))>0){//send part of the fileif(send(st,buf,sizeof(char)*num,0)==-1){printf("send failed !error message :%s\n",strerror(errno));break;}memset(buf,0,sizeof(buf));}fclose(pfr);END:close(st);return 0; }
//网络编程服务端--发送大文件 #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 two param !\n");return -1;}int port = atoi(args[1]);int st = socket(AF_INET, SOCK_STREAM, 0);if (st == -1){printf("create socket failed ! error message :%s\n", strerror(errno));return -1;}//defien IP addressstruct 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);//bind portif (bind(st, (struct sockaddr *) &addr, sizeof(addr)) == -1){printf("bind failed ! error message :%s\n", strerror(errno));goto END;}//listenif (listen(st, 20) == -1){printf("listen failed ! error message :%s\n", strerror(errno));goto END;}//只接收一个用户连接int clientst = 0;struct sockaddr_in client_addr;memset(&client_addr, 0, sizeof(client_addr));size_t client_addrlen = sizeof(client_addr);clientst = accept(st, (struct sockaddr *) &client_addr, &client_addrlen);if (clientst == -1){printf("accept failed ! error message :%s\n", strerror(errno));goto END;}//recv messagechar buf[1024] = { 0 };int mflag = 0;//open the file streamFILE * pfa = NULL;pfa = fopen("/home/test/2/1.dat", "a");if (pfa == NULL){printf("open the file failed ! error message :%s\n", strerror(errno));goto END;}while (1){mflag = recv(clientst, buf, sizeof(buf), 0);if (mflag == 0){printf("client is closed!\n");break;} else if (mflag == -1){printf("recv message is failed ! error message :%s\n",strerror(errno));break;}//将文件写到当前程序目录下fwrite(buf, sizeof(char), mflag, pfa);memset(buf, 0, sizeof(buf));}fclose(pfa);END: close(st);return 0; }
.SUFFIXES:.c .o CC=gcc SRCS1=mclient.c SRCS2=mserver.c OBJS1=$(SRCS1:.c=.o) OBJS2=$(SRCS2:.c=.o) EXEC1=mcl EXEC2=mserstart:$(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)
转载于:https://www.cnblogs.com/zhanggaofeng/p/5886989.html
Linux Linux程序练习十(网络编程大文件发送)相关推荐
- Linux Linux程序练习十一(网络编程大文件发送UDP版)
//网络编程发送端--大文件传输(UDP) #include <stdio.h> #include <stdlib.h> #include <string.h> # ...
- Linux多线程、多进程、网络编程常见问题
Linux多进程.多线程.网络编程常见问题 入门 1.GCC的工作流程? 工作流程: 预处理.编译.汇编.链接 具体流程如下: 2.gcc常用的参数选项 3.Makefile介绍 3.1.Makefi ...
- linux下C语言socket网络编程简例
转自博文:http://blog.csdn.net/kikilizhm/article/details/7858405 在练习写网络编程时,该例给了我帮助,在写服务器时,我把while逻辑位置想法错了 ...
- Linux操作系统下C语言网络编程(全文23475字,包含了Linux系统下所有网络编程的知识点,附程序代码)
一.简介 如今网络应用随处可见,web.http.email 等这些都是网络应用程序,他们都有着基于相同的基本编程模型,有着相似的整体逻辑结构,并且还有着相同的编程接口.我们需要了解基本的客户端-服务 ...
- linux应用程序接收文件,Linux应用程序学习之文件编程
Linux应用程序学习之文件系统调用函数编程 上一篇我们了解了Linux系统下函数库的设计方法,这一章我们就来学习一下linux系统下常用的文件操作函数,在进行系统文件操作函数介绍前,我们首先要明白一 ...
- 【计算机网络】Linux环境中的TCP网络编程
文章目录 前言 一.TCP Socket API 1. socket 2. bind 3. listen 4. accept 5. connect 二.封装TCPSocket 三.服务端的实现 1. ...
- 基于Linux下的服务器搭建(网络编程)
这是服务器,客户端是qt编写的.看情况再写吧 注意这是头文件: #include <stdio.h> #include <string.h> #include <stdl ...
- 你所需要的java网络编程大总结
好好学java java知识分享/学习教程免费分享 关注 精彩内容 你所需要的java全套视频教程 你所需要的java电子图书 你所需要的大数据视频教程 你所需要的java练习项目 如 / 梦 上个月 ...
- 黑马程序员_网络编程总结
------- android培训.java培训.期待与您交流! ---------- //以下笔记来自毕向东老师课程的总结 网络编程 网络编程的实现方式 网络编程有两种实现方式:即通过TCP协议和U ...
- linux tcp文件分包_Linux网络监控工具大点兵
网络通讯Linux中最基本基本的功能之一,很多是时候我们需要获取Linux的网络信息.Linux中存在很多网络监控工具,本文就给大家介绍一下,Linux常见的网络监控工具. Netstat Netst ...
最新文章
- 2019与下一个十年:我们将要放弃的和将要拥抱的
- HDU 1271整数对
- PHP中抽象类与接口的应用场景
- Unity3DGUI:Window
- C++笔记-基于邻接表的BFS(宽度优先遍历)
- 魅族管理层换血?官方回应:信息被错误解读 黄章仍为最大股东
- 济南python工资一般多少-济南Go全栈区块链课程
- 静态网站与动态网站的区别 静态网站生成工具
- 【Android】12.0 第12章 Intent及其过滤器—本章示例主界面
- 使用procexp.exe查看线程
- SURF算法python实现
- (一)CGAL库应用:指定平面切割模型并用openGL显示该层面轮廓
- 腾讯云服务器IP地址绑定域名步骤
- rabbit MQ的rpc功能详解
- 山东大学密码学引论复习重点总结与期末试题
- 可视门铃全国产化电子元件推荐方案
- 你还在用Excel? 用这工具,5步完爆Excel表格
- 人际交往中,你的真诚相待一定会换来疏远
- vue文本框中禁止输入空格和使用enter键
- 查看虚拟机CentOS7 的 IP 地址
热门文章
- 水稻PHP基因,科学网—和驯化相关的水稻基因 - 闫双勇的博文
- 变量求和_高中生看过来:高考数列求和的方法有哪些?本文主要分享6种方法...
- 【POJ2155】Matrix(二维区间修改+单点查询---二维树状数组)
- STM32——库函数版——超声波测距模块
- 如何用计算机制作统计图,统计图制作_ai的环形统计图怎么制作
- 阿里云云计算 36 PolarDB MySQL的管理步骤
- 正态分布下贝叶斯决策的特例(二)
- 怎么看神经网络过早收敛_遗传算法的收敛性分析
- 387. First Unique Character in a String - String
- 187.重复的DNA序列