//网络编程客户端--大文件传输
#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<)
{
printf("please print three param !\n");
return -;
}
int port=atoi(args[]);
//create socket
int st=socket(AF_INET,SOCK_STREAM,);
if(st==-)
{
printf("create socket failed ! error message :%s\n",strerror(errno));
return -;
}
//defien IP address
struct sockaddr_in addr;
//init addr
memset(&addr,,sizeof(addr));
addr.sin_family=AF_INET;
addr.sin_port=htons(port);
addr.sin_addr.s_addr=inet_addr(args[]);
if(connect(st,(struct sockaddr *)&addr,sizeof(addr))==-)
{
printf("connect failed ! error message :%s\n",strerror(errno));
goto END;
}
//send file //define file stream
FILE * pfr=NULL;
//open the file in read mode
pfr=fopen(args[],"r");
if(pfr==NULL)
{
printf("open the file failed !error message :%s\n",strerror(errno));
goto END;
}
char buf[]={};
size_t num=;
while((num=fread(buf,sizeof(char),sizeof(buf),pfr))>)
{
//send part of the file
if(send(st,buf,sizeof(char)*num,)==-)
{
printf("send failed !error message :%s\n",strerror(errno));
break;
}
memset(buf,,sizeof(buf));
}
fclose(pfr);
END:close(st);
return ;
}
//网络编程服务端--发送大文件
#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 < )
{
printf("please print two param !\n");
return -;
}
int port = atoi(args[]);
int st = socket(AF_INET, SOCK_STREAM, );
if (st == -)
{
printf("create socket failed ! error message :%s\n", strerror(errno));
return -;
}
//defien IP address
struct sockaddr_in addr;
memset(&addr, , sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
//bind port
if (bind(st, (struct sockaddr *) &addr, sizeof(addr)) == -)
{
printf("bind failed ! error message :%s\n", strerror(errno));
goto END;
}
//listen
if (listen(st, ) == -)
{
printf("listen failed ! error message :%s\n", strerror(errno));
goto END;
}
//只接收一个用户连接
int clientst = ;
struct sockaddr_in client_addr;
memset(&client_addr, , sizeof(client_addr));
size_t client_addrlen = sizeof(client_addr);
clientst = accept(st, (struct sockaddr *) &client_addr, &client_addrlen);
if (clientst == -)
{
printf("accept failed ! error message :%s\n", strerror(errno));
goto END;
}
//recv message
char buf[] = { };
int mflag = ;
//open the file stream
FILE * 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 ()
{
mflag = recv(clientst, buf, sizeof(buf), );
if (mflag == )
{
printf("client is closed!\n");
break;
} else if (mflag == -)
{
printf("recv message is failed ! error message :%s\n",
strerror(errno));
break;
}
//将文件写到当前程序目录下
fwrite(buf, sizeof(char), mflag, pfa);
memset(buf, , sizeof(buf));
}
fclose(pfa);
END: close(st);
return ;
}
.SUFFIXES:.c .o
CC=gcc
SRCS1=mclient.c
SRCS2=mserver.c
OBJS1=$(SRCS1:.c=.o)
OBJS2=$(SRCS2:.c=.o)
EXEC1=mcl
EXEC2=mser start:$(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)

Linux Linux程序练习十(网络编程大文件发送)的更多相关文章

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

    //网络编程发送端--大文件传输(UDP) #include <stdio.h> #include <stdlib.h> #include <string.h> # ...

  2. linux下C语言socket网络编程简例

    原创文章,转载请注明转载字样和出处,谢谢! 这里给出在linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到client的连接后,发送数据给client:clie ...

  3. Linux C 程序 GTK+图形界面编程(22)

    GTK+图形界面编程 Linux大多是在字符界面,但也可以开发图形界面 目前已经存在多种Linux下开发图形界面的程序开发包:最常用的是Qt和GTK+ Qt是一个跨平台的图形界面开发库,不仅仅支持Li ...

  4. Linux IO多路复用之epoll网络编程及源码(转)

    原文: 前言 本章节是用基本的Linux基本函数加上epoll调用编写一个完整的服务器和客户端例子,可在Linux上运行,客户端和服务端的功能如下: 客户端从标准输入读入一行,发送到服务端 服务端从网 ...

  5. Linux IO多路复用之epoll网络编程(含源码)

    前言 本章节是用基本的Linux基本函数加上epoll调用编写一个完整的服务器和客户端例子,可在Linux上运行,客户端和服务端的功能如下: 客户端从标准输入读入一行,发送到服务端 服务端从网络读取一 ...

  6. Linux IO多路复用之epoll网络编程

    前言 本章节是用基本的Linux基本函数加上epoll调用编写一个完整的服务器和客户端例子,可在Linux上运行,客户端和服务端的功能如下: 客户端从标准输入读入一行,发送到服务端 服务端从网络读取一 ...

  7. 《Linux命令行与shell脚本编程大全》 第一、二章 学习笔记

    第一章:初识Linux shell Linux内核负责以下4个主要功能: 1.系统内存管理 2.软件程序管理 3.硬件设备管理 4.文件系统管理 1.系统内存管理 内核不仅管理服务器上的可用物理内存, ...

  8. 大数据之路week04--day03(网络编程)

    哎,怎么感觉自己变得懒了起来,更新博客的频率变得慢了起来,可能是因为最近得知识开始变得杂变得难了起来,之前在上课的时候,也没有好好听这一方面的知识,所以,现在可以说是在学的新的知识,要先去把新的知识思 ...

  9. 浅谈TCP/IP网络编程中socket的行为

    我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉: 1. TCP/IP协议(如连接的建立和终止.重传和确认.滑动窗口和拥塞控制等等) 2. Socket I/O系统 ...

随机推荐

  1. IOS 杂笔-2(协议)

    1.协议的定义 @protocol 协议名称 <NSObject> //方法声明列表 @end; 2.如何遵守协议 (1)类遵守协议 @protocol 类名:父类名 <协议名称1, ...

  2. IOS之UI -- 按钮UIButton的细节

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  3. XAlign:用于代码对齐的Xcode插件

    除下面的插件对齐,xcode自带有cmd+v,在没有复制或者剪切的情况下,直接按cmd+v会有着对齐参数标签冒号的作用. XAlign 是一个 Xcode 的实用插件,用于对齐规范代码.除了插件作者  ...

  4. C# List中随机获取N个字符

    static void Main(string[] args) { List<string> strList = new List<string>(); ; i <= ; ...

  5. Jmeter组件执行顺序与作用域

    一.Jmeter重要组件: 1)配置元件---Config Element: 用于初始化默认值和变量,以便后续采样器使用.配置元件大其作用域的初始阶段处理,配置元件仅对其所在的测试树分支有效,如,在同 ...

  6. WebApi 使用PUT和DELETE时报405的问题

    最近两天写了个项目,里面有一个接口是用谓词delete接收请求. 本地完全没问题,但是当发布到服务器上之后(IIS7.5),就报出 405.0 - Method Not Allowed 很明显是配置问 ...

  7. redis中set命令的源码分析

    首先在源码中的redis.c文件中有一个结构体:redisCommand redisCommandTable[],这个结构体中定义了每个命令对应的函数,源码中的set命令对应的函数是setComman ...

  8. nyoj 1029/hdu 3714 Error Curves 三分

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3714 懂了三分思想和F(x)函数的单调性质,这题也就是水题了 #include "stdio ...

  9. redis状态查看

      https://redis.readthedocs.org/en/latest/server/slowlog.html   https://redis.readthedocs.org/en/lat ...

  10. Linux系统之压缩、解压缩,vi编辑器,系统初始化服务和系统监控

    一.正文处理,压缩与解压缩 1.内容重定向>与>> >:覆盖,将>号左边的结果覆盖到>号右边的文件中,如果文件不存在,则先创建一个新的空文件并覆盖 >> ...