Linux C实现文件传输

file_server.c  文件传输顺序服务器示例

//////////////////////////////////////////////////////////////////////////////////////<

br>// file_server.c  文件传输顺序服务器示例

////////////////////////////////////////////////////////////////////////////////////////

本文件是服务器的代码#include <netinet/in.h>    // for sockaddr_in#include 

<sys/types.h>    // for socket#include <sys/socket.h>    // for 

socket#include <stdio.h>        // for printf#include <stdlib.h>        // 

for exit#include <string.h>        // for bzero/*#include 

<sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include 

<unistd.h>*/#define HELLO_WORLD_SERVER_PORT    6666 #define 

LENGTH_OF_LISTEN_QUEUE  20#define BUFFER_SIZE 1024#define FILE_NAME_MAX_SIZE 512int 

main(int argc, char **argv){    //设置一个socket地址结构server_addr,代表服务器internet地

址, 端口    struct sockaddr_in server_addr;    bzero(&server_addr,sizeof

(server_addr)); //把一段内存区的内容全部设置为0    server_addr.sin_family = AF_INET;    

server_addr.sin_addr.s_addr = htons(INADDR_ANY);    server_addr.sin_port = htons

(HELLO_WORLD_SERVER_PORT);    //创建用于internet的流协议(TCP)socket,用server_socket代表服务

器socket    int server_socket = socket(PF_INET,SOCK_STREAM,0);    if( server_socket < 

0)    {        printf("Create Socket Failed!");        exit(1);    }

    //把socket和socket地址结构联系起来    if( bind(server_socket,(struct sockaddr*)

&server_addr,sizeof(server_addr)))    {        printf("Server Bind Port : %d 

Failed!", HELLO_WORLD_SERVER_PORT);         exit(1);    }    //server_socket用

于监听    if ( listen(server_socket, LENGTH_OF_LISTEN_QUEUE) )    {        printf

("Server Listen Failed!");         exit(1);    }    while (1) //服务器端要

一直运行    {        //定义客户端的socket地址结构client_addr        struct 

sockaddr_in client_addr;        socklen_t length = sizeof(client_addr);        //接受一

个到server_socket代表的socket的一个连接        //如果没有连接请求,就等待到有连接请求--这是

accept函数的特性        //accept函数返回一个新的socket,这个socket(new_server_socket)用于同连

接到的客户的通信        //new_server_socket代表了服务器和客户端之间的一个通信通道        

//accept函数把连接到的客户端信息填写到客户端的socket地址结构client_addr中        int 

new_server_socket = accept(server_socket,(struct sockaddr*)&client_addr,&length);    

    if ( new_server_socket < 0)        {            printf("Server Accept 

Failed!\n");            break;        }        char buffer[BUFFER_SIZE];    

    bzero(buffer, BUFFER_SIZE);        length = recv

(new_server_socket,buffer,BUFFER_SIZE,0);//这里先接收客户端发来的要获取的文件名        if 

(length < 0)        {            printf("Server Recieve Data Failed!

\n");            break;        }        char file_name

[FILE_NAME_MAX_SIZE+1];        bzero(file_name, FILE_NAME_MAX_SIZE+1);        strncpy

(file_name, buffer, strlen(buffer)>FILE_NAME_MAX_SIZE?FILE_NAME_MAX_SIZE:strlen

(buffer));//        int fp = open(file_name, O_RDONLY);//        if( fp < 0 )     

   FILE * fp = fopen(file_name,"r");        if(NULL == fp )        {       

     printf("File:\t%s Not Found\n", file_name);        }        else      

  {            bzero(buffer, BUFFER_SIZE);            int file_block_length = 0;//   

         while( (file_block_length = read(fp,buffer,BUFFER_SIZE))>0)            while( 

(file_block_length = fread(buffer,sizeof(char),BUFFER_SIZE,fp))>0)            {       

         printf("file_block_length = %d\n",file_block_length);                //发

送buffer中的字符串到new_server_socket,实际是给客户端                if(send

(new_server_socket,buffer,file_block_length,0)<0)                {                    

printf("Send File:\t%s Failed\n", file_name);                    break;        

        }                bzero(buffer, BUFFER_SIZE);            }                        

                                         //这段代码是循环读取文件的一段数据,在循环调用send,发

送到客户端,这里强调一点的TCP每次接受最多是1024字节,多了就会分片,因此每次发送时尽量不要超过

1024字节。//            close(fp);            fclose(fp);            printf

("File:\t%s Transfer Finished\n",file_name);        }        //关闭与客户端的

连接        close(new_server_socket);    }    //关闭监听用的socket    close

(server_socket);    return 0;}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索socket
, printf
, include
, buffer
, linux socket
, size length
, linux c socket
, socket server
, socket;c++;服务器;
, #c#socket
, c#socket
socket文件
c语言实现ftp文件传输、c语言实现文件传输、c实现文件传输、linux c tcp 文件传输、linux c 传输文件,以便于您获取更多的相关知识。

时间: 2024-10-11 10:43:23

Linux C实现文件传输的相关文章

Linux Mac之间文件传输

Linux Mac之间文件传输 从Mac上传输文件到Linux主机上,这个过程可以使用 FTP 客户端,如 Transmit for Mac,FileZilla  虽然使用客户端操作起来比较方便,但需要下载安装等,可能遇到下载不流畅等问题.所以还是有一部分人喜欢在终端敲命令来实现文件传输的. ==================  scp 命令 (Mac,Linux通用) ==================  scp 可以在 2个 linux 主机间复制文件:  命令基本格式:        

线程-windows 和 linux 网络编程文件传输

问题描述 windows 和 linux 网络编程文件传输 windows 两个线程,linux 两个进程,现在想传输一个文件,windows 这边其中的一个进程传一部分,剩下的由另外的一个进程来传.有什么好的方法吗?找了好多可是都没有相关的资料.谢谢大家. 解决方案 就是socket通信传递,windows做客户端,linux做服务端 解决方案二: Linux与Windows下文件传输windows到linux的文件传输linux 和 windows 文件传输

Linux ftp 远程文件传输

  ftp 命令 是标准的文件传输协议的用户接口,ftp 是在TCP/IP 网络上的计算机之间传输文件的简单有效的方法.它允许用户传输ASCII 文件和二进制文件.在ftp 会话过程中,用户可以通过使用ftp 客户程序连接到另一台计算机上.从此,用户可以在目录中上下移动.列出目录内容.把文件从远程机拷贝到本地机上.把文件从本地机传输到远程系统中.需要注意的是,如果用户没有那个文件的存取权限,就不能从远程系统中获得文件或向远程系统传输文件为.了使用ftp 来传输文件,用户必须知道远程计算机上的合法

Linux命令大全文件传输: bye

功能说明:中断FTP连线并结束程序. 语 法:bye 补充说明:在ftp模式下,输入bye即可中断目前的连线作业,并结束ftp的执行.

Linux命令大全文件传输: ftpwho

功能说明:显示目前所有以FTP登入的http://www.aliyun.com/zixun/aggregation/10619.html">用户信息. 语 法:ftpwho 补充说明:执行这项指令可得知目前用FTP登入系统的用户有那些人,以及他们正在进行的操作.

嵌入式arm linux蓝牙文件传输移植

嵌入式arm linux蓝牙文件传输移植目前,蓝牙技术已经比较成熟,特别是基于手机和PC得蓝牙文件传输. 本文主要讲述基于嵌入式arm linux的蓝牙文件传输.    现行2.6.x的linux内核都已经集成了bluez蓝牙驱动,对于2.4版本内核的需要到bluez官方网站下载并安装bluez蓝牙驱动.http://www.bluez.org/download/    本为基于2.6版本的内核讲述.对于2.4下载bluez后安装即可.有了bluez蓝牙驱动还需要安装bluez-libs库和bl

Linux与windows之间-文件传输工具RZSZ

RZSZ简介 一般来说,linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用ssh登陆 linux主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上传和下载文件到服务器和本地 : 与ssh有关的两个命令可以提供很方便的操作: sz:将选定的文件发送(send)到本地 机器 rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到Linux服务器 rz, sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具,windows端需要支持ZMode

Linux系统下的文件传输工具:RZSZ的用法

Linux系统下传输方式很多,比如:通过FTP SFTP - 等等.linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用ssh登陆linux主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上传和下载文件到服务器和本地,根据RZSZ特性,这里我们通过SecureCRT提供ZModem配合RZSZ传输工具进行讲解 首先先了解与ssh有关的两个命令可以提供很方便的操作: sz:将选定的文件发送(send)到本地机器 rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到

Linux文件传输与mysql数据库安装

文件传输工具使用 为了速成,关于linux系统的学习都先放一放,用到哪个知识点就查哪个,这里想在linux下装一些 服务练练手,最先想到的就是装个mysql数据库试试. 因为我用的是虚拟机下的linux,而且虚拟机还是精简版的.一直 琢磨着怎么把windows下面的文件导捣鼓到linux下,郁闷的是装的centOS打不开,一闪就没了!但ping 百度网址是通的.然后 想给虚拟机捣鼓着安装VMware tools 也没成功,后来调整了一下虚拟机的几种联网方式也没把问题解决. 后来想到一种 方式,既