精华内容
下载资源
问答
  • Socket文件传输

    热门讨论 2013-09-25 18:26:51
    本软件使用MFC采用面向对象的方法实现了基于Socket文件传输。功能完整。
  • Socket文件传输源码 asp.net版Socket文件传输源码 asp.net版Socket文件传输源码 asp.net版Socket文件传输源码 asp.net版Socket文件传输源码 asp.net版
  • socket文件传输c#

    2018-06-03 17:24:55
    socket传输文件 服务端 客户端
  • C#Socket文件传输,将文件名和文件保存到一个byte[]中传输,再通过解析获取文件名和文件保存到本地文件夹中
  • Android Socket 文件传输

    2016-11-18 10:43:12
    发送端用Socket发送指定路径的文件给接收端,接收端将文件存储到指定路径。
  • 基于java nio socket文件传输例程
  • linux下的c++实现socket文件传输功能

    热门讨论 2012-07-13 10:49:35
    在linux下的c/c++实现的socket文件传输
  • 计算机网络课程设计基于socket文件传输实验,vs2013c++
  • Java基于Socket文件传输示例:服务器端和客户端 Java基于Socket文件传输示例:服务器端和客户端 Java基于Socket文件传输示例:服务器端和客户端
  • socket文件传输_断点_大文件都可以_vs2003
  • 多线程socket文件传输

    2008-05-11 10:14:50
    多线程socket文件传输/支持断点续/收发消息/点对多点 使用阻塞方式的socket,使用多线程,有较高的性能. 在局域网中测试达到极限速度. 支持断点续. 服务端可同时接收多个文件. 传输文件的同时可以发送网络消息.
  • 但是如果让我们自己写一个网络文件传输的程序,估计大家都傻眼了,今天小编就给大家以最简单的方式,让C#初学者能够快速开发出实用的Socket文件传输程序。 温馨提示:在看本篇之前首先得有socket编程,也就是能收发...

    首先,对于大家而言,想必对网络传输并不陌生,因为我们每天都在下载“文件”。嘻嘻!!!于是乎有木有初学员就想自己写一个文件传输程序,但是实际操作中可能还是比较困难的,不然我们也不会相遇了,哈哈哈。

    今天小编就给大家以最简单的方式,让C#初学者能够快速开发出实用的Socket文件传输程序。


    一、所需工具:

    1. VS2019及以上版本
    2. Internet网络
    3. 电脑一台
    4. 还有必不可少的程序集RRQMSocket.FileTransfer(后面介绍下载和引用)

    二、概述

    首先我们先来介绍一下该程序集的一些功能

    • 简单易用。
    • 多线程处理。
    • 高性能,传输速度可达500Mb/s。
    • 超简单的传输限速设置,1k-10Gb 无级调节。
    • 超简单的传输速度、传输进度获取。
    • 随心所欲的暂停、继续、停止传输。
    • 系统化的权限管理,让敏感文件只允许私有化下载。
    • RPC交互,让客户端和服务器交流不延迟。
    • 基于事件驱动,让每一步操作尽在掌握。
    • 可视化的文件块流,可以实现像迅雷一样的填充式进度条。
    • 超简单的断点续传设置,为大文件传输保驾护航。
    • 无状态上传断点续传设置,让同一个文件,在不同客户端之间接力上传。
    • 换网续传(企业版支持)
    • 已经上传的文件,再次上传时,可实现快速上传。
    • 极少的GC释放。

    三、支持环境

    • .NET Framework4.5及以上。
    • .NET Core3.1及以上。
    • .NET Standard2.0及以上。

    四、性能测试

    在开始之前,首先得进行性能测试下,这样才能让各位猿友放心使用,也不再追问到底能不能跑满整个宽带了。

    测试环境:
    测试硬件:戴尔笔记本G5,i7-10750H,8G RAM+256G固态+1T机械。 测试系统:Window10 家庭版,x64位。

    上传速度
    因为客户端和服务器都在一起运行,所以相当于磁盘在同一时间里读取和写入,在这样得情况下,上传速度达到332Mb/s。
    在这里插入图片描述
    下载速度
    下载达到346Mb/s
    在这里插入图片描述

    五、建立解决方案

    5.1 新建项目

    新建一个解决方案,添加一个控制台项目作为服务器,然后再添加一个Winform项目作为客户端
    在这里插入图片描述

    5.2 引用Nuget

    在VS里面的NuGet程序包功能里面,联网的情况下搜索“RRQMSocket.FileTransfer”,如果版本较低或者是破解版的话,就去Nuget官方网站自行下载,然后解压自行引用。
    在这里插入图片描述
    在这里插入图片描述

    六、创建服务器

    FileService fileService = new FileService();
    
    //订阅相关事件
    //fileService.ClientConnected += FileService_ClientConnected;
    //fileService.ClientDisconnected += FileService_ClientDisconnected;
    //fileService.BeforeFileTransfer += this.FileService_BeforeFileTransfer;
    //fileService.FinishedFileTransfer += this.FileService_FinishedFileTransfer;
    //fileService.Received += this.FileService_Received;
     try
     {
         var config = new FileServiceConfig();
         config.SetValue(ServerConfig.ListenIPHostsProperty, new IPHost[] { new IPHost("127.0.0.1:7789") })
             .SetValue(ServerConfig.ThreadCountProperty, 5)
             .SetValue(RRQMConfig.LoggerProperty, new Log())
             .SetValue(TokenServerConfig.VerifyTokenProperty, "FileServer")
             .SetValue(FileServiceConfig.BreakpointResumeProperty, true)
             .SetValue(FileServiceConfig.MaxDownloadSpeedProperty, 1024 * 1024 * 10L)
             .SetValue(FileServiceConfig.MaxUploadSpeedProperty, 1024 * 1024 * 10L);
    
         this.fileService.Setup(config);
         this.fileService.Start();
        
         Console.WriteLine("启动成功");
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
     }
    
    

    七、创建客户端

    7.1 初始化客户端

    FileClient fileClient = new FileClient();
    
    //订阅相关事件
    //fileClient.TransferFileError += this.FileClient_TransferFileError;
    //fileClient.BeforeFileTransfer += this.FileClient_BeforeFileTransfer; ;
    //fileClient.FinishedFileTransfer += this.FileClient_FinishedFileTransfer; ;
    //fileClient.DisconnectedService += this.FileClient_DisConnectedService;
    //fileClient.ConnectedService += this.FileClient_ConnectedService;
    //fileClient.FileTransferCollectionChanged += this.FileClient_FileTransferCollectionChanged;
    //fileClient.Received += this.FileClient_Received;
    
    
    try
    {
        var config = new FileClientConfig();
        config.SetValue(FileClientConfig.LoggerProperty, new Log())
            .SetValue(FileClientConfig.RemoteIPHostProperty, new IPHost("127.0.0.1:7789"))
            .SetValue(FileClientConfig.VerifyTokenProperty, "FileServer");
        fileClient.Setup(config);
        fileClient.Connect();
        Console.WriteLine("连接成功");
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
    
    

    7.2 请求下载

    fileClient.RequestTransfer(UrlFileInfo.CreatDownload("C:/1.txt", restart:true));
    

    7.2 请求上传

    fileClient.RequestTransfer(UrlFileInfo.CreatUpload("C:/1.txt", false, fileClient.BreakpointResume));
    

    八、API

    除了以上demo的演示,更多功能大家可以去API手册逐一浏览。

    交流方式

    展开全文
  • Java实现socket文件传输

    千次阅读 2018-05-07 22:02:12
    Java实现通过socket文件传输:用到的类:DataInputStream :数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。 ...

    Java实现通过socket文件传输:

    用到的类:

    DataInputStream :数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。

    DataOutputStream :数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。


    读取文件中的信息:

    客户端:首先需要实例化一个File()对象,构造器中说明该文件的位置名字例如:

    File file = new File("g://1.wmv");

    用对文件操作的输入流FileOutPutStream()方法包装File()对象 file

    FileInputStream fis = new FileInputStream(file);

    从底层输入流中读取文件

    dis = new DataInputStream(fis);//读取文件

    发送读取到的文件

    dos = new DataOutputStream(server.getOutputStream());//将读取到的文件写入输出流中
                dos.writeUTF(file.getName());//发送文件名
                dos.flush();//清空数据流

    发送数据文件

    int n = -1;
                byte[] buffer = new byte[1024];
                while ((n = dis.read(buffer)) != -1) {
                    dos.write(buffer, 0, n);
                }

    展开全文
  • 简单socket文件传输(类似FTP)客户端 实现断点续和多线程,
  • 实现了python3 的socket 文件传输 服务端 其中服务端需要在服务端一直保持运行状态 from socket import * import os import shlex, subprocess serverPort = 12000 serverSocket = socket(AF_INET,SOCK_STREAM)#...

    实现了python3 的socket 文件传输

    服务端

    其中服务端需要在服务端一直保持运行状态

    from socket import *
    import os
    import shlex, subprocess
    
    serverPort = 12000
    serverSocket = socket(AF_INET,SOCK_STREAM)#新建
    serverSocket.bind(('',serverPort))
    serverSocket.listen(1)
    
    
    
    while True:
        # 脚本可以接受文件
        print ('The server is ready to receive')
        try:
            #建立链接
            connectionSocket, addr = serverSocket.accept()
    
            sentence = connectionSocket.recv(1024).decode()
            connectionSocket.send(bytes("connection start!",'utf-8'))
            # 若果发送的是链接建立请求那么建立链接,否则重新等待新的链接建立请求
            if sentence=="start of transmission":
                # 这次传输的是文件名字
                name = connectionSocket.recv(1024).decode()
                connectionSocket.send(bytes("filename ACK",'utf-8'))
    
                print(name)
                f=open("copy_"+name,"wb")
                
            else :
                print("error in connection setting!")
                continue
            counter=1
            while True:
                try:
                    # 接受文件1024 bytes
                    data = connectionSocket.recv(1024)
                    # 文件结束标志
                    if data==b"00001111":
                        print("end of file")
                        connectionSocket.send(bytes("continue",'utf-8'))
                        break
                    else:
                        #写入文件中
                        f.write(data)
                        
                        print("this is the "+str(counter))
                        connectionSocket.send(bytes("continue",'utf-8'))
                        counter=counter+1
                # 键盘中断
                except KeyboardInterrupt:
                    print("file transmission with crtl c!")
                    pass
                
            # 文件写入完成信息
            print("close file!")
            f.close()
            print("close file success!")
            connectionSocket.close()
            # 键盘退出
        except KeyboardInterrupt:
            connectionSocket.close()
            exit("keyboard Interrupt")
    

    客户端

    封装成一个函数,对主机ip,服务器端口号,文件名字调用即可,十分方便

    from socket import *
    import os
    def file_send(serverName,serverPort,name):
        # serverName ='192.168.43.87'
    
        # serverPort = 12000
        clientSocket = socket(AF_INET, SOCK_STREAM)#新建链接
        clientSocket.connect((serverName,serverPort))
    
        # 建立链接
        print("initial connection")
        start_sentence="start of transmission"
        clientSocket.send(bytes(start_sentence,'utf-8'))
        modifiedSentence = clientSocket.recv(2048).decode()
        # 服务端同意则开始传输文件名
        if modifiedSentence=="connection start!":
            print("server allow the connection!")
        else :
            print("start error!")
    
        #发送文件名字
        # name="test_1.png"
        print("sending file name")
        clientSocket.send(bytes(name,'utf-8'))
        modifiedSentence = clientSocket.recv(2048).decode()
        if modifiedSentence=="filename ACK":
            print("server ACK the file name")
    
        #发送文件
        counter=1
        try:
            files=open(name, "rb")
            while True :
                data=files.read(1024)
                # 如果读取结束那么就发送b"00001111"表示结束
                if data==b"":
                    clientSocket.send(b"00001111")
                    break
                else:
                    clientSocket.send(data)
                
                    print("waiting "+str(counter)+" response")
                    modifiedSentence=clientSocket.recv(1024).decode()
                    print("get "+str(counter)+" response")
                    
                    counter=counter+1
        except :
            pass
    
    
        # end_sentence="end of transmission"
        # clientSocket.send(bytes(end_sentence,'utf-8'))
        print("end transmisson success!")
        clientSocket.close()#关闭
    
    file_send('192.168.43.87',12000,"test_1.png")
    
    展开全文
  • Java基于Socket文件传输示例

    千次阅读 2017-09-21 16:13:49
    Java基于Socket文件传输示例 最近需要进行网络传输大文件,于是对基于socket的文件传输作了一个初步的了解。在一位网友提供的程序基础上,俺进行了一些加工,采用了缓冲输入/输出流来包装输出流,再采用数据输入/...

    Java基于Socket文件传输示例

    最近需要进行网络传输大文件,于是对基于socket的文件传输作了一个初步的了解。在一位网友提供的程序基础上,俺进行了一些加工,采用了缓冲输入/输出流来包装输出流,再采用数据输入/输出输出流进行包装,加快传输的速度。废话少说,先来看服务器端的程序。

    1.服务器端

    package sterning;

    import java.io.BufferedInputStream;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.net.ServerSocket;
    import java.net.Socket;

    public class ServerTest {
    int port = 8821;

    void start() {
    Socket s
    = null;
    try {
    ServerSocket ss
    = new ServerSocket(port);
    while (true) {
    // 选择进行传输的文件
    String filePath = "D:\\lib.rar";
    File fi
    = new File(filePath);

    System.out.println(
    "文件长度:" + (int) fi.length());

    // public Socket accept() throws
    // IOException侦听并接受到此套接字的连接。此方法在进行连接之前一直阻塞。

    s
    = ss.accept();
    System.out.println(
    "建立socket链接");
    DataInputStream dis
    = new DataInputStream(new BufferedInputStream(s.getInputStream()));
    dis.readByte();

    DataInputStream fis
    = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
    DataOutputStream ps
    = new DataOutputStream(s.getOutputStream());
    //将文件名及长度传给客户端。这里要真正适用所有平台,例如中文名的处理,还需要加工,具体可以参见Think In Java 4th里有现成的代码。
    ps.writeUTF(fi.getName());
    ps.flush();
    ps.writeLong((
    long) fi.length());
    ps.flush();

    int bufferSize = 8192;
    byte[] buf = new byte[bufferSize];

    while (true) {
    int read = 0;
    if (fis != null) {
    read
    = fis.read(buf);
    }


    if (read == -1) {
    break;
    }

    ps.write(buf,
    0, read);
    }

    ps.flush();
    // 注意关闭socket链接哦,不然客户端会等待server的数据过来,
    // 直到socket超时,导致数据不完整。
    fis.close();
    s.close();
    System.out.println(
    "文件传输完成");
    }


    }
    catch (Exception e) {
    e.printStackTrace();
    }

    }


    public static void main(String arg[]) {
    new ServerTest().start();
    }

    }


    2.socket的Util辅助类

    package sterning;

    import java.net.*;
    import java.io.*;

    public class ClientSocket {
    private String ip;

    private int port;

    private Socket socket = null;

    DataOutputStream out
    = null;

    DataInputStream getMessageStream
    = null;

    public ClientSocket(String ip, int port) {
    this.ip = ip;
    this.port = port;
    }



    public void CreateConnection() throws Exception {
    try {
    socket
    = new Socket(ip, port);
    }
    catch (Exception e) {
    e.printStackTrace();
    if (socket != null)
    socket.close();
    throw e;
    }
    finally {
    }

    }


    public void sendMessage(String sendMessage) throws Exception {
    try {
    out
    = new DataOutputStream(socket.getOutputStream());
    if (sendMessage.equals("Windows")) {
    out.writeByte(
    0x1);
    out.flush();
    return;
    }

    if (sendMessage.equals("Unix")) {
    out.writeByte(
    0x2);
    out.flush();
    return;
    }

    if (sendMessage.equals("Linux")) {
    out.writeByte(
    0x3);
    out.flush();
    }
    else {
    out.writeUTF(sendMessage);
    out.flush();
    }

    }
    catch (Exception e) {
    e.printStackTrace();
    if (out != null)
    out.close();
    throw e;
    }
    finally {
    }

    }


    public DataInputStream getMessageStream() throws Exception {
    try {
    getMessageStream
    = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
    return getMessageStream;
    }
    catch (Exception e) {
    e.printStackTrace();
    if (getMessageStream != null)
    getMessageStream.close();
    throw e;
    }
    finally {
    }

    }


    public void shutDownConnection() {
    try {
    if (out != null)
    out.close();
    if (getMessageStream != null)
    getMessageStream.close();
    if (socket != null)
    socket.close();
    }
    catch (Exception e) {

    }

    }

    }


    3.客户端

    package sterning;

    import java.io.BufferedOutputStream;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.FileOutputStream;

    public class ClientTest {
    private ClientSocket cs = null;

    private String ip = "localhost";// 设置成服务器IP

    private int port = 8821;

    private String sendMessage = "Windwos";

    public ClientTest() {
    try {
    if (createConnection()) {
    sendMessage();
    getMessage();
    }


    }
    catch (Exception ex) {
    ex.printStackTrace();
    }

    }


    private boolean createConnection() {
    cs
    = new ClientSocket(ip, port);
    try {
    cs.CreateConnection();
    System.out.print(
    "连接服务器成功!" + "\n");
    return true;
    }
    catch (Exception e) {
    System.out.print(
    "连接服务器失败!" + "\n");
    return false;
    }


    }


    private void sendMessage() {
    if (cs == null)
    return;
    try {
    cs.sendMessage(sendMessage);
    }
    catch (Exception e) {
    System.out.print(
    "发送消息失败!" + "\n");
    }

    }


    private void getMessage() {
    if (cs == null)
    return;
    DataInputStream inputStream
    = null;
    try {
    inputStream
    = cs.getMessageStream();
    }
    catch (Exception e) {
    System.out.print(
    "接收消息缓存错误\n");
    return;
    }


    try {
    //本地保存路径,文件名会自动从服务器端继承而来。
    String savePath = "E:\\";
    int bufferSize = 8192;
    byte[] buf = new byte[bufferSize];
    int passedlen = 0;
    long len=0;

    savePath
    += inputStream.readUTF();
    DataOutputStream fileOut
    = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream(savePath))));
    len
    = inputStream.readLong();

    System.out.println(
    "文件的长度为:" + len + "\n");
    System.out.println(
    "开始接收文件!" + "\n");

    while (true) {
    int read = 0;
    if (inputStream != null) {
    read
    = inputStream.read(buf);
    }

    passedlen
    += read;
    if (read == -1) {
    break;
    }

    //下面进度条本为图形界面的prograssBar做的,这里如果是打文件,可能会重复打印出一些相同的百分比
    System.out.println("文件接收了" + (passedlen * 100/ len) + "%\n");
    fileOut.write(buf,
    0, read);
    }

    System.out.println(
    "接收完成,文件存为" + savePath + "\n");

    fileOut.close();
    }
    catch (Exception e) {
    System.out.println(
    "接收消息错误" + "\n");
    return;
    }

    }


    public static void main(String arg[]) {
    new ClientTest();
    }

    }


    这就实现了从服务器端向客户端发送文件的过程,当然,反过来,也一样.稍有不同.代码中对跨平台的细节没有实现,有时间或兴趣的朋友可以提供一下.

    展开全文
  • 基于socket文件传输示例,控制台简单进度与速度显示
  • linux下socket文件传输示例

    千次阅读 2018-01-31 11:35:11
    本文所述示例程序是基于Linux平台的socket网络编程,实现文件传输功能。该示例是基于TCP流协议实现的socket网络文件传输程序。采用C语言编写。最终能够实现传输任何格式文件的文件传输程序。 具体实现代码如下: ...
  • 多线程socket文件传输支持断点续收发消息点对多点 使用阻塞方式的socket。经过测试,程序比较稳定,可在此基础上进行后续开发。
  • 今天写了一个文件传输工具。但是之前没有写过。就从网上学习了一下。掌握了大致的步骤。  第一阶段:Socket连接 服务器端(发送文件):首先打开文件【fopen】,用rb方式打开,既可以发送文本文件,也可以...
  • socket文件传输功能的实现

    千次阅读 2017-04-29 11:25:34
    这节我们来完成 socket 文件传输程序,这是一个非常实用的例子。要实现的功能为:client 从 server 下载一个文件并保存到本地。 编写这个程序需要注意两个问题: 1) 文件大小不确定,有可能比缓冲区大很多,调用...
  • 多线程socket文件传输_支持断点续_收发消息_点对多点
  • java socket文件传输

    2014-07-16 11:24:48
    文件传输的原理大体上与聊天的原理差不多,通过socket建立客户端与服务器端的连接,客户端可以发送请求,服务器端处理请求。 工作原理大概如下: 客户端: 1.在本地选取要传输文件 2.通过socket建立与...
  • Android连接热点的Socket文件传输

    万次阅读 多人点赞 2017-03-31 08:55:10
    最近把测试丢过来的种种BUG解决后,终于有时间去研究研究Socket通信,再加上以前做的WiFi连接和热点开启,于是有了现在的这篇博文:创建热点发送文件,让另一台手机连接热点接收文件。 两台设备是如何传输文件的: ...
  • 本文所述示例程序是基于Linux平台的socket网络编程,实现文件传输功能。该示例是基于TCP流协议实现的socket网络文件传输程序。采用C语言编写。最终能够实现传输任何格式文件的文件传输程序。 代码: 服务器端...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 221,367
精华内容 88,546
关键字:

socket文件传输