精华内容
下载资源
问答
  • 网络编程--实现跨平台传输文件(TCP版)
  • SendAnywhere 跨平台传输文件(推荐)

    千次阅读 2015-09-17 07:58:37
    SendAnywhere 跨平台传输文件

    SendAnywhere 是一个可以跨平台传输文件的应用,可以再PC、手机之间非常方便的传输文件。

    可以使用二维码认证,也可使用6位数字认证。多台设备登陆同一个账户默认这些设备同属于一个账户,能够记录对方设备。

    展开全文
  • Linux利用SSH工具实现跨平台传输文件

    千次阅读 2017-04-03 21:24:34
    可以使用ssh协议的工具来实现文件跨平台传输。可以使用pscp.exe来实现文件的传输。 pscp.exe是一个命令行工具,所以不能被直接打开,因此需要在cmd中运行,为了方便运行,我们可以把pscp.exe放到环境变量中去,也...

    可以使用ssh协议的工具来实现文件的跨平台传输。可以使用pscp.exe来实现文件的传输。

    pscp.exe是一个命令行工具,所以不能被直接打开,因此需要在cmd中运行,为了方便运行,我们可以把pscp.exe放到环境变量中去,也可以直接放到C盘的windows中。

    语法格式(windows中文件传输到Linux中)  pscp windows中的文件路径 用户名@主机地址:文件的保存路径


    举例:使用pscp将文件传输到root用户家目录中的data目录中。


    先创建data目录,Linux命令:mkdir data

    然后进入传输介面:


    展开全文
  • 为了实现跨平台,需要对跨平台的代码进行条件编译。 //makefile-win .SUFFIXES: .c .o CC=gcc SERVERSRCS=server.c\ pub.c CLIENTSRCS=client.c\ pub.c SERVEROBJS=$(SERVERSRCS:.c=.o) CLIENTOBJS=$(CLI

    网络编程--实现跨平台传输文件(TCP版)源码下载地址


        为了实现跨平台,需要对跨平台的代码进行条件编译。

    gcc的-D选项。

    连接选项
    -lWs2_32
    代表要用Ws2_32.lib这个库

    gcc编译选项,-D 代表定义一个宏,等同于在c语言当中定义 #defind WIN

    在windows下,使用socket之前,必须使用WSAStartup初始化socket,程序运行结束以后必须调用WSACleanup释放相关资源

    windown下,关闭socket使用closesocket函数


    //makefile-win

    .SUFFIXES: .c .o
    CC=gcc
    SERVERSRCS=server.c\
                pub.c
    CLIENTSRCS=client.c\
                pub.c
            
    SERVEROBJS=$(SERVERSRCS:.c=.o)
    CLIENTOBJS=$(CLIENTSRCS:.c=.o)
    SERVEREXEC=server.exe
    CLIENTEXEC=client.exe
    all:$(SERVEROBJS) $(CLIENTOBJS)
        $(CC) -static -o $(SERVEREXEC) $(SERVEROBJS) -lWs2_32
        $(CC) -static -o $(CLIENTEXEC) $(CLIENTOBJS) -lWs2_32 
        @echo '-------------ok--------------'
    .c.o:
        $(CC) -Wall -DWIN -o $@ -c $< 
    clean:
        rm -f $(SERVEROBJS)
        rm -f $(CLIENTOBJS)
        rm -f core*

    //makefile

    .SUFFIXES: .c .o
    CC=gcc
    SERVERSRCS=server.c\
                pub.c
    CLIENTSRCS=client.c\
                pub.c
            
    SERVEROBJS=$(SERVERSRCS:.c=.o)
    CLIENTOBJS=$(CLIENTSRCS:.c=.o)
    SERVEREXEC=server
    CLIENTEXEC=client
    all:$(SERVEROBJS) $(CLIENTOBJS)
        $(CC) -o $(SERVEREXEC) $(SERVEROBJS)
        $(CC) -o $(CLIENTEXEC) $(CLIENTOBJS)
        @echo '-------------ok--------------'
    .c.o:
        $(CC) -Wall -o $@ -c $< 
    clean:
        rm -f $(SERVEROBJS)
        rm -f $(CLIENTOBJS)
        rm -f core*

    //pub.h

    #ifndef PUB_H_
    #define PUB_H_
    int send_work(const char *hostname, int port, const char *filename);
    int recv_work(int port);
    #endif /* PUB_H_ */  

    //pub.c

    #ifdef WIN
    #include <WinSock2.h>
    #else
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/socket.h>
    #include <arpa/inet.h>
    #include <errno.h>
    #include <string.h>
    #define SOCKET int
    #endif
    
    #include <stdio.h>
    #include "pub.h"
    
    #define BUFSIZE 262144  //256k
    
    void getfilename(const char *filename, char *name)//从完整路径名中解析出文件名称,例如:/home/test/abc.txt,解析完成后为abc.txt
    {
    	int len = strlen(filename);
    	int i;
    	for (i = (len - 1); i >= 0; i--)
    	{
    		if ((filename[i] == '\\') || (filename[i] == '/'))
    		{
    			break;
    		}
    	}
    	strcpy(name, &filename[i + 1]);
    	return;
    }
    
    SOCKET init_socket()//初始化socket
    {
    //如果是windows,执行如下代码
    #ifdef WIN
    	WORD wVersionRequested;
    	WSADATA wsaData;
    	int err;
    	wVersionRequested = MAKEWORD(1, 1);
    	err = WSAStartup(wVersionRequested, &wsaData);
    	if (err != 0)
    	{
    		return -1;
    	}
    
    	if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
    	{
    		WSACleanup();
    		return -1;
    	}
    #endif
    
    	return 0;
    }
    
    SOCKET socket_connect(const char *hostname, int port)//连接到指定的主机和端口号
    {
    	if (init_socket() == -1)
    		return 0;
    
    	SOCKET st = socket(AF_INET, SOCK_STREAM, 0);//建立TCP socket
    	if (st == 0)
    		return 0;
    	struct sockaddr_in addr;
    	memset(&addr, 0, sizeof(addr));
    	addr.sin_family = AF_INET;
    	addr.sin_port = htons(port);//指定port为要连接的端口号
    	addr.sin_addr.s_addr = inet_addr(hostname);//指定hostname为要连接的IP地址
    	if (connect(st, (struct sockaddr *) &addr, sizeof(addr)) == -1)
    	{
    		printf("connect to %s:%d failed %s\n", hostname, port, strerror(errno));
    		return 0;//连接失败,返回0
    	} else
    	{
    		return st;//连接成功,返回socket描述符
    	}
    }
    
    SOCKET socket_create(int port)//在port指定的端口上建立server端socket
    {
    	if (init_socket() == -1)
    		return 0;
    
    	SOCKET st = socket(AF_INET, SOCK_STREAM, 0);//建立TCP socket
    	if (st == 0)
    		return 0;//如果建立socket失败,返回0
    
    #ifdef WIN
    	const char on = 0;
    #else
    	int on = 0;
    #endif
    
    	if (setsockopt(st, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1)
    	{
    		printf("setsockopt failed %s\n", strerror(errno));
    		return 0;
    	}
    	struct 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);
    	if (bind(st, (struct sockaddr *) &addr, sizeof(addr)) == -1)//server端socket,所以需要绑定IP地址
    	{
    		printf("bind failed %s\n", strerror(errno));
    		return 0;
    	}
    	if (listen(st, 20) == -1)
    	{
    		printf("listen failed %s\n", strerror(errno));
    		return 0;
    	}
    	printf("listen %d success\n", port);
    	return st;//server端socket建立成功,返回server端socket描述符
    }
    
    SOCKET socket_accept(SOCKET listen_st)//server端socket开始accept的函数
    {
    	struct sockaddr_in client_addr;
    
    #ifdef WIN
    	int len = 0;
    #else
    	unsigned int len = 1;
    #endif
    
    	len = sizeof(client_addr);
    	memset(&client_addr, 0, sizeof(client_addr));
    	SOCKET client_st = accept(listen_st, (struct sockaddr *) &client_addr,
    			&len);//accept阻塞,直到有client连接到server才返回
    	if (client_st == -1)
    	{
    		printf("accept failed %s\n", strerror(errno));
    		return 0;
    	} else
    	{
    		printf("accept by %s\n", inet_ntoa(client_addr.sin_addr));
    		return client_st;//有client连接到server,返回client的socket描述符
    	}
    }
    
    int send_work(const char *hostname, int port, const char *filename)//向hostname指定的IP地址发送filename指定的文件
    {
    	SOCKET st = socket_connect(hostname, port);//连接到hostname指定的IP地址和port指定的端口号
    	if (st == 0)//连接失败,函数返回
    		return 0;
    
    	FILE *fd = fopen(filename, "rb");//以只读方式打开filename指定的文件
    	if (fd == NULL)//如果文件打开失败,函数返回
    	{
    		printf("open %s failed %s\n", filename, strerror(errno));
    		return 0;
    	}
    
    	char *buf = malloc(BUFSIZE);//申请一个缓冲区,存放接收到的文件内容
    	memset(buf, 0, BUFSIZE);
    	getfilename(filename, buf);//从完整路径名中解析出文件名称,例如:/home/test/abc.txt,解析完成后为abc.txt
    	size_t rc = send(st, buf, strlen(buf), 0);//客户端第一次给server端发送的数据为要传递的文件名称,将解析完成后的文件名通过socket发送给server端
    	if (rc <= 0)
    	{
    		if (rc < 0)
    			printf("send failed %s\n", strerror(errno));
    		else
    			printf("socket disconnect\n");
    
    	} else
    	{
    
    		memset(buf, 0, BUFSIZE);
    		if (recv(st, buf, BUFSIZE, 0) <= 0)//接收来自server端的回复
    		{
    			if (rc < 0)
    				printf("recv failed %s\n", strerror(errno));
    			else
    				printf("socket disconnect\n");
    		} else
    		{
    			if (strncmp(buf, "OK", 2) == 0)//如果收到来自服务端的回复,代表服务端认可,可以发送文件了
    			{
    				while (1)
    				{
    					memset(buf, 0, BUFSIZE);
    					rc = fread(buf, 1, BUFSIZE, fd);//循环读取文件,直到读到文件尾,循环break
    					if (rc <= 0)
    					{
    						if (rc < 0)
    							printf("fread failed %s\n", strerror(errno));
    						break;
    					} else
    					{
    						rc = send(st, buf, rc, 0);//将从文件中读到的数据,通过socket发送到server端,其中rc为从文件中读到的数据大小
    						if (rc <= 0)//如果发送失败,代表TCP连接出错,循环break
    						{
    							if (rc < 0)
    								printf("send failed %s\n", strerror(errno));
    							else
    								printf("socket disconnect\n");
    							break;
    						}
    					}
    				}
    			}
    		}
    	}
    
    	fclose(fd);
    	free(buf);
    
    #ifdef WIN	
    	closesocket(st);
    	WSACleanup();
    #else	
    	close(st);
    #endif
    	return 1;
    }
    
    int recv_work(int port)//server端socket在port指定的端口上listen,接收来自client发送的文件
    {
    	SOCKET listen_st = socket_create(port);//建立server端socket,在port指定端口listen
    	if (listen_st == 0)//如果创建服务端socket失败,函数返回0
    		return 0;
    	SOCKET st = socket_accept(listen_st);//如果有client连接到达,socket_accept函数返回client的socket描述符
    	if (st == 0)
    		return 0;
    
    	char *buf = malloc(BUFSIZE);//建立接收文件数据缓冲区
    	FILE *fd = NULL;
    
    	memset(buf, 0, BUFSIZE);
    	size_t rc = recv(st, buf, BUFSIZE, 0);//接收来自client的数据,客户端第一次要发送的文件名称
    	if (rc <= 0)
    	{
    		if (rc < 0)
    			printf("recv failed %s\n", strerror(errno));
    		else
    			printf("socket disconnect\n");
    
    	} else
    	{
    		printf("receiving %s\n", buf);
    
    		fd = fopen(buf, "wb");//以只写方式打开文件
    		if (fd == NULL)
    		{
    			printf("open %s failed %s\n", buf, strerror(errno));
    		} else
    		{
    			memset(buf, 0, BUFSIZE);
    			strcpy(buf, "OK");
    			rc = send(st, buf, strlen(buf), 0);//回复客户端,同意接收文件
    			if (rc <= 0)
    			{
    				if (rc < 0)
    					printf("send failed %s\n", strerror(errno));
    				else
    					printf("socket disconnect\n");
    			}
    
    			while (1)
    			{
    				memset(buf, 0, BUFSIZE);
    				rc = recv(st, buf, BUFSIZE, 0);//循环接收来自client的数据,数据为发送文件的内容
    				if (rc <= 0)//如果client连接断开,代表文件传递完成,或者网络意外中断,循环break
    				{
    					if (rc < 0)
    						printf("recv failed %s\n", strerror(errno));
    					else
    						printf("socket disconnect\n");
    					break;
    				} else
    				{
    					fwrite(buf, 1, rc, fd);//将从client端收到的内容写入文件
    				}
    			}
    		}
    	}
    
    	if (fd)
    		fclose(fd);//关闭打开的文件
    	free(buf);
    
    #ifdef WIN	
    	closesocket(st);
    	closesocket(listen_st);
    	WSACleanup();
    #else	
    	close(st);
    	close(listen_st);
    #endif
    	return 1;
    }
    

    //client.c

    #include <stdio.h>
    #include <stdlib.h>
    #include "pub.h"
    
    int main(int arg, char *args[])
    {
    	if (arg < 4)//如果参数小于3个,main函数退出
    	{
    		printf("usage:client host port filename\n");
    		return EXIT_FAILURE;
    	}
    
    	int iport = atoi(args[2]);//将第二个参数转化为端口号
    	if (iport == 0)//如果端口号为0,main函数退出
    	{
    		printf("port %d is invalid\n", iport);
    		return EXIT_FAILURE;
    	}
    
    	printf("%s send begin\n", args[3]);
    	if (send_work(args[1], iport, args[3]) == 1)//将第一个参数做为IP地址,第二个参数做为端口号,第三个参数做为要发送的文件名传递给send_work函数
    		printf("%s send success\n", args[3]);
    	else
    		printf("%s send fail\n", args[3]);
    
    	return EXIT_SUCCESS;
    }
    

    //server.c

    #include <stdio.h>
    #include <stdlib.h>
    #include "pub.h"
    
    int main(int arg, char *args[])
    {
    	if (arg < 2)//如果没有参数,main函数退出
    	{
    		printf("usage:server port\n");
    		return EXIT_FAILURE;
    	}
    
    	int iport = atoi(args[1]);//将第一个参数转化为端口号,server端socket要在这个端口号上listen
    	if (iport == 0)
    	{
    		printf("port %d is invalid\n", iport);
    		return EXIT_FAILURE;
    	}
    
    	printf("recv is begin\n");
    	if (recv_work(iport) == 1)//server端socket在port指定的端口上listen,接收来自client发送的文件
    		printf("recv success\n");
    	else
    		printf("recv fail\n");
    	return EXIT_SUCCESS;
    }
    

    在window下编译命令,进入到源文件所在路径下,执行:
    make -f makefile-win

    运行:
    一:windows接收,linux发送

    二:windows发送,linux接收




    展开全文
  • 跨平台文件传输工具

    2019-02-05 10:31:25
    跨平台文件传输工具:支持windows、linux大文件传输,无广告。
  • 跨平台文件传输

    2012-10-28 13:44:54
    基于TCP/IP通信协议,跨平台完成文件传输(在linux和windows系统之间进行文件传输)。在linux系统的工程有Makefile ,windows是基于vc6.0做的开发!(linux系统下的服务器,linux下的客服端和windows系统下的客服端...
  • 一款强悍的手机跨平台文件传输工具
  • C++跨平台的网络文件传输客户端源码
  • 而相比它们更出色,Dukto 完全免费开源,而且支持 Win、Mac、Linux、iOS、Android 等系统的跨平台文件,拥有 Win8 的简约风格界面。只要电脑/手机们位于同一个局域网下 (不必连接互联网),就能通过它来互相聊天或...
  • 文件NDropJ 使用拖放和网络发现的跨平台简单文件传输
  • 纵观来看,数据传输的一般步骤是先发送数据头,包括文件大小和文件名,然后开始传输数据。但是我的需求是发送端为Windows系统,而接收端为linux系统,使用之前的代码接收到的文件一直有损坏,导致后续工作失败。在...

    最近在做一个项目,涉及到本地机器和服务器之间的数据传输,因此也查了许多资料和博客。纵观来看,数据传输的一般步骤是先发送数据头,包括文件大小和文件名,然后开始传输数据。但是我的需求是发送端为Windows系统,而接收端为linux系统,使用之前的代码接收到的文件一直有损坏,导致后续工作失败。在查阅了无数资料后,终于找到一种解决办法,特记录在这里。

    下面是部署在发送端的代码,和网上查找的代码基本相同:

    import socket
    import struct
    import sys
    import os
    import time
    
    
    if __name__ == '__main__':
    
        file_name = sys.argv[1]
    
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.connect((socket.gethostname(), 12345))
    
        # 定义文件头信息;
        file_head = struct.pack('128sl', os.path.basename(file_name).encode(),
                            os.stat(file_name).st_size)
    
        sock.send(file_head)
    
        read_file = open(file_name, "rb")
    
        while True:
            # time.sleep(1)
            file_data = read_file.read(10240)
    
            if not file_data:
                break
    
            sock.send(file_data)
    
        read_file.close()
        sock.close()

    下面是接收端的代码,这里主要对接收文件的地方进行了修改,代码如下:

    import socket
    import threading
    import os
    import struct
    
    
    def sending_file(connection):
        try:
            file_info_size = struct.calcsize('128sl')
    
            buf = connection.recv(file_info_size)
    
            if buf:
                file_name, file_size = struct.unpack('128sl', buf)
                file_name = file_name.decode().strip('\00')
    
                file_new_dir = os.path.join('receive')
                # print(file_name, file_new_dir)
                if not os.path.exists(file_new_dir):
                    os.makedirs(file_new_dir)
    
                file_new_name = os.path.join(file_new_dir, file_name)
    
                received_size = 0
    
                w_file = open(file_new_name, 'wb')
    
                print("start receiving file:", file_name)
    
                while not received_size == file_size:
    
                    r_data = connection.recv(10240)
                    received_size += len(r_data)
                    w_file.write(r_data)
    
                w_file.close()
    
                print("接收完成!\n")
    
            connection.close()
    
        except Exception as e:
            print(e)
    
    
    if __name__ == '__main__':
        host = socket.gethostname()
    
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.bind((host, 12345))
        sock.listen(5)
    
        print("服务已启动---------------")
    
        while True:
            connection, address = sock.accept()
            print("接收地址:", address)
            thread = threading.Thread(target=sending_file, args=(connection,))
            thread.start()

    这样修改的原因在于接收端并不是每次都能接收到buf_size大小的数据,因而在最后的一次connection.recv(file_size - received_size)不能保证一定能接收完数据,谨记。

    另外,在不同的平台上可能会遇到这个问题:struct.error: unpack requires a buffer of 136 bytes。

    这是由于平台的位数不同导致的,我的windows系统为32位,而linux系统为64位,因此应该将32位的机器上的128sl改为128sq,这样长度就相等了。如果想进一步拓展程序的兼容性,可以使用platform模块判断系统的位数和操作系统类别。

    展开全文
  • 跨平台传输工具FTPRush

    2013-12-31 14:08:24
    可直接安装使用,用于windows平台与linux平台进行文件传输交换
  • DuktoR6 官网:https://www.msec.it/blog/dukto/ win10不可使用 NitroShare官网:https://nitroshare.net/ win10可使用
  • 现在有一个较大的文件,如一个pdf大概300M,想要实现在一个ASP.NET开发的系统和一个JAVA开发的系统之间传输这个文件。 暂时没找到合适的方法,尝试过转换为二进制数据,但是文件大小并没有改变多少,有时候还增加。
  • Dukto 是一款非常简单实用的局域网文件传输工具,支持 Win、Mac、Linux、iOS、Android 等系统的跨平台文件,拥有 Win8 的简约风格界面。只要位于同一个局域网下 (不必连接互联网),就能通过它来互相聊天或传文件...
  • LAN-Share:使用Qt C ++框架构建的跨平台LAN文件传输应用程序
  • 行业分类-电子电器-负载自适应跨平台文件传输协议及其分布式服务实现方法.zip
  • 本地文件上传到服务器 scp /local/file user@remote_ip:/remote/file 从服务器下载文件 scp user@remote_ip:remote/file /local/file 本地目录上传到服务器 scp -r local/dic/ user@remote_ip:remote/dic/ ...
  • 而相比它们更出色,Dukto 完全免费开源,而且支持 Win、Mac、Linux、iOS、Android 等系统的跨平台文件,拥有 Win8 的简约风格界面。只要电脑/手机们位于同一个局域网下 (不必连接互联网),就能通过它来互相聊天或...
  • 行业文档-设计装置-Linux服务端与windows客户端之间跨平台文件传输方法.zip
  • 教育科研-学习工具-Linux服务端与windows客户端之间跨平台文件传输方法.zip
  • oDrop是跨平台的LAN文件传输软件,可以在计算机之间高效地传输文件。oDrop在没有GUI的环境中很有用。 oDrop和其他文件传输软件有什么区别 oDrops命令简单易记,这是创建oDrop时的首要任务之一。 特征 使用udp4查找...
  • FileCast - 零设置、跨平台桌面到移动文件传输工具 日常问题:需要将文件从台式计算机复制到移动设备(或 Internet 上某处的另一台台式计算机)。 FileCast 提供了一个简单、轻松的解决方案,用于通过其内置的网络...
  • //实现两台计算机进行文件传输,包括跨平台传输即linux与windows之间 //TCP的文件传输 //文件大小不限制,需要做到将大文件分包去做 server.c //服务端程序 int main(int arg,char * args[ ]) { if(arg ) { ...
  • 做了一个聊天室程序,传递1.5G的文件时,每次传递20K,windows下大概3分钟左右,无压力。但是当把服务器放在linux下,客户端仍然在windows,传递时间变成了18分钟左右。 做了一个验证,普通的发短消息,在windows...
  • Dukto是一个类似飞鸽传书的局域网文件传输工具,而它的优势在于能够跨平台支持Windows、Mac、Linux、Android和黑莓等操作系统,并在日前最新发布了iOS客户端,且新增了中文支持。 要实现不同设备间的文件传输,用户...
  • 一个简单跨平台的预设P2P文件传输工具,目前支持Windows / Linux / OS X 用法 当本机作为客户端时: mercury -t client -p path -i serverIP [-P port -T threadnum -b buffer -n blocksize] 当本机作服务器为时...
  • 局域网内 mac 与 win 跨平台传输文件工具 duto, 能自动发现网内设备,可以传输文字、文件等,速度也快。 此为 mac版
  • A、将源端数据文件传输到目标系统。 B、转换数据文件为目标系统的字节序。 C、在源端创建增量备份,并传输到目标端。 D、在目标端恢复增量备份。 E、重复多次操作C和D步骤。 F、将源端数据库表空间设置为READ ONLY...
  • 基于FTP应用协议,通过CH395实现跨平台远程文件管理系统。CH563作为主控制芯片,负责处理所有的事务;CH395作为以太网协议栈芯片,提供以太网数据传输通道。该系统硬件简单,遵循熟悉的文件操作方式,很好地实现了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 91,899
精华内容 36,759
关键字:

跨平台传输文件