我们常用它来关闭套接字和传输文件,有没有传输缓冲的例子,我刚试了一下,能用,但不知道性能如何,专请高手来分析一下,如果效率不错的话,microsoft为什么还要使用TransmitPackets?急切等待中...

解决方案 »

  1.   

    提供给TransmitFile的是文件句柄,所以发送文件的读写IO还是要的,因此没有TransmitPackets发送来得效率高。
      

  2.   

    TRANSMIT_FILE_BUFFERS data;
    data.Head = buf;
    data.HeadLength = strlen(buf);
    data.Tail = buf;
    data.TailLength = strlen(buf); if(lpfnTransmitFile(s,NULL,0,0,NULL,&data,TF_DISCONNECT) != SOCKET_ERROR)
    return ;
    这可以的,也没操作文件的,直接发送缓冲的数据,我在客户端能收到完整的数据.
    就是不知道与TransmitPacktes的区别.
      

  3.   

    另外问一下:
    if(::WSAIoctl(Listen,SIO_GET_EXTENSION_FUNCTION_POINTER,(void*)&GuidTranmitFile,sizeof(GuidTranmitFile),
    &lpfnTransmitFile,sizeof(lpfnTransmitFile),&dwBytes,NULL,NULL) == SOCKET_ERROR)
    return;
    -------------------------------------------------------------------------------------
    if(::WSAIoctl(Listen,SIO_GET_EXTENSION_FUNCTION_POINTER,(void*)&GuidTranmitPackets,sizeof(GuidTranmitPackets),
    &lpfnTransmitPackets,sizeof(lpfnTransmitPackets),&dwBytes,NULL,NULL) == SOCKET_ERROR)
    {
    DWORD err = ::WSAGetLastError();   //10022
    return;
    }
    为什么同样的加载方法,第一个成功了,第二个失败,为10022参数错误.
      

  4.   

    确定GUID值是正确?如果是的话可能是socket版本不够新?
      

  5.   

    GUID是从mswsock.h中拷贝过来的,我装了.NET 2003,mswsock.h已经从原来的4K增加到12K了,原来的mswsock.h里只定义了AcceptEx,TransmitFile和另外一个,但现在已经都定义了,.dll和.lib应该也更新了哟.