TCP编程实现LINUX平台文件传输工程

server端代码

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 #include <string.h>
 5 #include <unistd.h>
 6 #include <sys/types.h>
 7 #include <sys/socket.h>
 8 #include <netinet/in.h>
 9 #include <arpa/inet.h>
10
11 #define    MAXLINE        1024
12
13 void usage(char *command)
14 {
15     printf("usage :%s portnum filename\n", command);
16     exit(0);
17 }
18 int main(int argc,char **argv)
19 {
20     struct sockaddr_in     serv_addr;
21     struct sockaddr_in     clie_addr;
22     char                   buf[MAXLINE];
23     int                    sock_id;
24     int                    link_id;
25     int                    recv_len;
26     int                    write_leng;
27     int                    clie_addr_len;
28     FILE                   *fp;
29
30     if (argc != 3) {
31         usage(argv[0]);
32     }
33 /*<-----------------------------------------socket---------------------------------------------->*/
34     if ((sock_id = socket(AF_INET, SOCK_STREAM, 0)) < 0)
35     {
36         perror("Create socket failed\n");
37         exit(0);
38     }
39 /*<-----------------------------------------bind------------------------------------------------->*/
40     memset(&serv_addr, 0, sizeof(serv_addr));
41     serv_addr.sin_family = AF_INET;
42     serv_addr.sin_port = htons(atoi(argv[1]));
43     serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
44
45     if (bind(sock_id, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0 )
46     {
47         perror("Bind socket failed\n");
48         exit(0);
49     }
50 /*<-----------------------------------------listen----------------------------------------------->*/
51     if (-1 == listen(sock_id, 10))
52     {
53         perror("Listen socket failed\n");
54         exit(0);
55     }
56 /*<-------------------------------------server receive part---------------------------------->*/
57     while (1) {
58         if ((fp = fopen(argv[2], "w")) == NULL)
59         {
60             perror("Open file failed\n");
61             exit(0);
62         }
63         lseek(fp, 0, SEEK_END);
64         clie_addr_len = sizeof(clie_addr);
65 /*<-----------------------------------------accept----------------------------------------------->*/
66         link_id = accept(sock_id, (struct sockaddr *)&clie_addr, &clie_addr_len);
67         if (-1 == link_id) {
68             perror("Accept socket failed\n");
69             exit(0);
70         }
71         bzero(buf, MAXLINE);
72         while (recv_len = recv(link_id, buf, MAXLINE, 0))
73         {
74             if(recv_len < 0)
75             {
76                 printf("Recieve Data From Server Failed!\n");
77                 break;
78             }
79             printf("#");
80             write_leng = fwrite(buf, sizeof(char), recv_len, fp);
81             if (write_leng < recv_len)
82             {
83                 printf("Write file failed\n");
84                 break;
85             }
86             bzero(buf,MAXLINE);
87         }
88         printf("\nFinish Recieve\n");
89         fclose(fp);
90         close(link_id);
91     }
92     close(sock_id);
93     return 0;
94 }  
时间: 2024-12-10 00:15:52

TCP编程实现LINUX平台文件传输工程的相关文章

Linux的文件传输命令总结

因为工作原因,需要经常在不同的服务器见进行文件传输,特别是大文件的传输,因此对linux下不同服务器间数据传输命令和工具进行了研究和总结.主要是rcp,scp,rsync,ftp,sftp,lftp,wget,curl. rcp rcp不是一种安全的的传输文件的方式,rcp通过rsh(rsh见下面)来执行远程命令,要使用rcp必须经过一些配置,现在rcp已经被scp取代了,常用scp来进行文件传输.要使用rcp,需要具备以下条件: (1)如果系统中有/etc/hosts 文件,应确保该文件包含要

windows与Linux实现文件传输Winscp工具的使用

WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议.它的主要功能就是在本地与远程计算机间安全的复制文件..winscp也可以链接其他系统,比如linux系统 Winscp最大的特性是图形化界面,能够实现像windows一样的拖拽功能,同时支持批量处理文件和命令行. 这里假设我们已经拥有了WinSCP软件运行的环境(一台Windows操作系统和一台Linux服务器).WinSCP软件安装包已经下载好,如果不会下载,在百度搜索中输入WinSCP,出来的第一

linux中文件传输

小结: wget时注意加参数来保持权限不变:或试下打个包然后再wget scp:机器A上scp不行,试下机器B上scp 1.wget 一个方便的下载工具,支持ftp协议和https协议.大文件时很好用. 如:wget http://www.test.com/test.tar.zip wget -r ftp://hostname/path  ./ 备注:wget ftp时,文件的权限会变化,有个选项可以保留远程文件的权限:--preserve-permissions 2.scp cp用于本机上复制

linux之间文件传输(之scp)

linux的scp命令 linux 的 scp 命令 可以 在 linux 之间复制 文件 和 目录: ==================scp 命令==================scp 可以在 2个 linux 主机间复制文件: 命令基本格式: scp [可选参数] file_source file_target ======从 本地 复制到 远程======* 复制文件:        * 命令格式:                scp local_file [email prot

Linux下文件传输

scp就是secure copy,一个在linux下用来进行远程拷贝文件的命令.有时我们需要获得远程服务器上的某个文件,该服务器既没有配置ftp服务器,也没有做共享,无法通过常规途径获得文件时,只需要通过简单的scp命令便可达到目的. 对拷文件夹 (包括文件夹本身)scp -r /home/sina/oracledb [email protected]:/home/sina/oracledb/scp对拷文件夹下所有文件 (不包括文件夹本身)scp /home/sina/oracledb/* [e

linux之间文件传输问题

如果linux服务器使用了秘钥登陆,可以先关闭秘钥登陆 http://blog.chinaunix.net/uid-23634108-id-2393471.html 然后:scp -P 端口号  note.txt  [email protected]地址:/home/mytest 如果是通过一台有外网的ip机连接到一台只有内网ip的服务器A,想要从A上网其他机器上放文件需要使用内网ip:scp -P 1322  t_brand.frm  [email protected]:/home/mytes

Linux平台QT数据库编程(来自网络)

Linux平台QT数据库编程 在linux平台使用qt来编写GUI程序,在进行数据库编程的时候,有两种选择方式,分别是:基于linux平台的数据库接口函数编程,另一种是使用qt自带的有关数据库类.那在这里我分别来讲一下这两种方式的实现. 一.使用linux平台的数据库接口编程: 在这里我使用的是一款免费的数据库sqlite,从网络上下一个sqlite-3.0.8.tar.gz源码包,然后进行安装,安装好后就可以使用它提供的函数接口.接下来我们用安装好的sqlite提供的函数接口,在QT中使用的,

os x &amp;&amp; linux 文件传输基础命令

一.从服务器下载文件到本机 1.修改文件所属 由于只能下载文件所属为自己的文件,所以要做修改文件所属的操作. chown hudelei /opt/logs/tomcat/app/tomcat_stk_nm/stk-time.log 2.下载到本机 scp [email protected]:/opt/logs/tomcat/app/tomcat_stk_nm/stk-time.log /Users/hvvi/Desktop 3.输入密码 二.上传文件夹到服务器 1.scp -r /Users/

linux网络环境下socket套接字编程(UDP文件传输)

今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中,如果我们使用TCP传输,会造成传输速度较慢的情况,所以我们在进行文件传输的过程中,最好要使用UDP传输. 在其中,我们需要写两个程序,一个客户端,一个服务端,在一个终端中,先运行服务端,在运行客户端,在服务端和客户端都输入IP地址和端口号,注意服务端和客户端的端口号要相同,然后选择功能,在linux