Socket局域网多线程传输文件的方法

1.思路:为了实现各种大小的文件都可发送和接收,可设置缓冲区循环发送和接收,并记录文件读到的位置,如果某次读入到缓冲区的字节数小于缓冲区的大小,则说明文件发送完了,退出发送循环,关闭连接。并且Csocket是阻塞的,接收端接能接收到发送端发送的所有内容,直到发送端连接关闭,接收端退出接收循环。

//循环发送文件

2.主要代码

发送端:

do

{

file.Seek(step,CFile::begin);

over=file.Read(buffer,BUFFERSIZE);//文件读入缓冲

err=sockClient.Send(buffer,over);

if( BUFFERSIZE>over
)

break;
//缓冲区的字节数小于缓冲区,也就是文件小于一个缓冲区,退出

step+=err; //下一次从step开始读文件

}while(
true);

sockClient.close();

接收端:

while( true
)

{

finish=fileListen.Receive(buffer,BUFFERSIZE);

if(0==finish)

break;//客户端发送连接已经关闭,发送完毕

file.Write(buffer,finish);

step+=finish;//写文件的位置

}

注意:合理设置缓冲区大小,此方法效率较低,是不是多开线程能加快速度?

时间: 2024-11-11 01:06:27

Socket局域网多线程传输文件的方法的相关文章

兼容所有系统的局域网传输文件通用方法

既然要通讯,那么必须有服务器和客户端.本文使用sshd做服务器,scp做客户端. 接受文件的一方必须使用sshd启动并绑定本机局域网端口,如0.0.0.0:22 绑定方法就是配置/etc/ssh/sshd_config这个配置文件,如果A(windows/linux/macos)向B(windows/linux/macos)发送文件,那么有两种方式: 假设A的用户名为userA,IP为192.168.1.10,文件路径/1.txt A运行sshd服务/usr/sbin/sshd,B运行scp [

初试python多线程传输文件

新手!!求见谅!!望多指点 由于工作原因,试用期需要学习python,因为运维工作全都是由python完成,幸好有点python基础,知道什么是列表,元组,字符,字典什么的,要不然死翘翘的. 创建多线程主要的步骤有: 1.创建一个函数,这个函数是多线程需要多次运行的内容 2.利用for循环生成对应函数的多个成品(就是说这个函数已经赋予了需要的参数了,直接运行就可以的了) 3.利用for循环开始执行函数 4.利用for循环使主程序挂起,等待子进程完成后再执行其他动作 ---------------

两台Linux服务器在局域网之间传输文件

1.1 实验环境: 服务器操作系统:CentOS6.7=192.168.24.37 客户端操作系统:CentOS6.7=192.168.24.36 虚拟机:VMware Workstation 1.2 实验背景 从一台服务器上的文件远程复制到另一台服务器上的方法很多,今天在这里sky采用Linux scp命令来完成此任务.即从服务器端拷贝一份源码文件"mysql-5.6.20.tar.gz"到客户端下. 1.3 实验步骤 scp –r 远程用户名 @IP 地址 : 文件名  本地目录

pscp多线程传输文件

前面说过pscp不支持多线程,所以在此特地实现了一个 程序分三个部分: 1.初始化各种参数,涉及getopt函数的使用 2.重新定义scp,实现传递IP然后远程拷贝 3.启动多线程调用scp,涉及多线程的启动和等待线程结束 import sys, getopt import commands import threading p = 1 host_file = "" source_file = "" destin_file = "" #init

两台Linux系统之间传输文件的几种方法

scp传输 当两台LINUX主机之间要互传文件时可使用SCP命令来实现 scp传输速度较慢,但使用ssh通道保证了传输的安全性 复制文件 将本地文件拷贝到远程 scp 文件名 –用户名@计算机IP或者计算机名称:远程路径 从远程将文件拷回本地 scp –用户名@计算机IP或者计算机名称:文件名 本地路径 命令格式 scp local_file [email protected]_ip:remote_folder 或者 scp local_file [email protected]_ip:rem

ARM 开发板嵌入式linux系统与主机PC通过串口传输文件

本文转载自http://useless20.blog.163.com/blog/static/237409982010227127576/ 嵌入式linux系统与主机通过串口传输文件 我想如果要从PC机下载东西到开发板的嵌入式linux系统里面,很多人首先会想到用tftp sftp等网络工具从网口下载.但如果网络用不了,只能通过串口下载怎么办呢?这个时候有两个工具能帮到你:一个是zmrx.zmtx,另外一个是lsz.lrz.个人觉得zmrx/zmtx没有lsz/lrz稳定,建议还是用后者.下面介

Linux socket跨局域网聊天和文件传输

一直想写一个跨局域网聊天和文件传输,以及视频聊天的软件,这两天刚好闲着没啥事就把代码写完了,代码已经上传至github:https://github.com/vinllen/chat 其实之前想法P2P模式,P2P的话必须穿透NAT,现在的NAT有4种模式: 完全圆锥型NAT 受限圆锥型NAT 端口受限圆锥型NAT 对称NAT(双向NAT) 维基百科给出的定义如下: 1.Full cone NAT,亦即著名的一对一(one-to-one)NAT 一旦一个内部地址(iAddr:port1)映射到外

socket局域网传输文件

其中发送端发送多少数据可以定制,(可以使用for循环循环读取文件并且send),但是在recv端,不能采用for循环定制recv大小,(及时最后加了if语句判断图像是不是接收完毕),另外在fwrite文件中的第二个参数,绝对不要定制,因为网络是不确定的你不知道socket缓冲区中的文件的确定数目,你recv写明接收8k,但是缓冲分区只有4k你也只能接4k,当你fwrite还写8k就有问题(fwrite写的时候最后用recv的返回值,表示正确接收字节数目). recv端代码: while(coun

Android网络编程只局域网传输文件

Android网络编程之局域网传输文件: 首先创建一个socket管理类,该类是传输文件的核心类,主要用来发送文件和接收文件 具体代码如下: 1 package com.jiao.filesend; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.FileInputStream; 6 import java.io.FileOutputStream; 7 import java