局域网中比如A机器共享一个文件夹,B机器读写,Windows ctrl_c ctrl_v,千兆网络带宽能吃到95%稳稳的,但是自己写的程序怎么也做不到,往往在70%左右波动,第三方程序也没发现哪个可以。编程中改了各种buffer模式,读写块大小,都不行!不知道有没有人搞得定这个问题? 哪怕是给出正确的原理解释也给分。

解决方案 »

  1.   

    Windows 里面的编程接口中, 底层有一个文件流直接发送接口, 系统内核直接映射待传输的文件, 然后由内核丢给协议栈最后由网卡发送出去。 自己编程的话, 可以按照这个逻辑调用这个接口。 函数具体的名字忘了, 但隐约记得和 SOCKET 还是 mapfile 方面有关系。
      

  2.   

    应该是协议的问题,你用socket的?
      

  3.   

    TransmitFile 是一个扩展的 API,它允许在套接字连接上发送一个打开的文件。这使得应用程序可以避免亲自打开文件,重复地在文件执行读入操作,再将读入的那块数据写入套接字。相反,已打开的文件的句柄是各套接字连接一起给出的,在套接字上,文件数据的读入和发送都在核心模式下进行。这就避免了亲自执行文件读入时必须的多重内核变换。
      

  4.   


    我没有直接使用socket,而是调用windows读写文件的api,背后的协议应该是socket
      

  5.   

    可以多线程同时操作。比如你的cpu是FX8350(8核心),你可以同时开8个线程来拷贝文件。将文件从开始处分割成八块,然后同时传输。接收端再接收到以后再整合。
    哦,本地拷贝可以,网络传输好像不行,因为你的socket只能点对点,除非你多开socket,连接同一个server。