如题。

解决方案 »

  1.   

    共享是可以传的,通过网上邻居或是编程实现 tcp/ip上的CSocket应用, 这种例子很多的
      

  2.   

    socket,send...recv...
    不就行了吗
      

  3.   

    http://expert.csdn.net/Expert/topic/1257/1257670.xml?temp=.1996881
      

  4.   


    /*===============================文件传输======================================================
        功能:把指定的文件传输到指定IP地址的计算机。
    参数:strIP : 目的计算机的IP地址。
          uPort : 端口号。
      chSrc : 文件路径及名称。
      bSend : 文件不存在时是否建立一个新文件。
        返回值:
    =============================================================================================*/
    BOOL CopyFileClient(CString strIP, UINT uPort, char *chSrc, BOOL bSend)
    {
    BOOL bRet = FALSE;
    CSocket sckClient;
    CFile file;
    do
    {
    if(bSend)
    {
    bRet = file.Open(chSrc, CFile::modeRead);
    }
    else
    {
    bRet = file.Open(chSrc, CFile::modeCreate | CFile::modeWrite);
    }
    if(!bRet)
    {
    break ;
    }
    bRet = sckClient.Create();
    if(!bRet)
    {
    break ;
    }
    bRet = sckClient.Connect(strIP, uPort);
    if(!bRet)
    {
    break ;
    }
    BYTE *chFileData = new BYTE[ 1024 + 1 ];
    char chData[10];
    int nSize = 0;
    if(bSend)
    {
    nSize = file.GetLength();
    int nRead = nSize;
    ZeroMemory(chData, 10);
    memcpy(chData, &nSize, sizeof(int));
    int nRet = sckClient.Send(chData, sizeof(int));
    if(nRet <= 0)
    {
    bRet = FALSE;
    break ;
    }
    while(nRead > 0)
    {
    int n1 = min(nRead, 1024);
    int n2 = file.Read(chFileData, n1);
    nRead -= n2;
    nRet = sckClient.Send(chFileData, n2);
    if(nRet <= 0)
    {
    bRet = FALSE;
    break ;
    }

    bRet = TRUE;
    }
    }
    else
    {
    char chData[10];
    ZeroMemory(chData, 10);
    nSize = 0;
    int nRet = sckClient.Receive(chData, 10);//读文件大小
    if(nRet <= 0)
    {
    bRet = FALSE;
    break ;
    }
    nSize = *((int*)(chData));
    if(nSize <= 0)
    {
    bRet = FALSE;
    break ;
    }
    BYTE *chFileData = new BYTE[1024+1];
    int nWrite = 0;
    while(nWrite < nSize)
    {
    nRet = sckClient.Receive(chFileData, 1024);
    if(nRet <= 0)
    {
    bRet = FALSE;
    break ;
    }
    file.Write(chFileData, nRet);
    nWrite += nRet;
    bRet = TRUE;
    }
    }
    delete []chFileData;
    if(!bRet) // 送文件数据出错.
    {
    break ;
    }
    }while(0);
    if(sckClient.m_hSocket != INVALID_SOCKET)
    {
    sckClient.Close();
    }
    if(file.m_hFile != CFile::hFileNull)
    {
    file.Close();
    } return bRet;
    }
    /*===============================文件接收======================================================
        功能:把接收的数据保存到指定的文件中。
    参数:uPort : 端口号。
      chSrc : 文件路径及名称。
      bSend : 文件不存在时是否建立一个新文件。
        返回值:
    =============================================================================================*/BOOL CopyFileServer(UINT uPort, char *chDes, BOOL bSend)
    {
    BOOL bRet = FALSE;
    CFile file;
    CSocket sckServer;
    CSocket sckClient;
    do
    {
    if(!bSend)
    {
    bRet = file.Open(chDes, CFile::modeCreate | CFile::modeWrite);
    }
    else
    {
    bRet = file.Open(chDes, CFile::modeRead);
    }
    if(!bRet)
    {
    break ;
    }
    bRet = sckServer.Create(uPort);
    if(!bRet)
    {
    break ;
    }
    bRet = sckServer.Listen();
    if(!bRet)
    {
    break ;
    }
    bRet = sckServer.Accept(sckClient);
    if(!bRet)
    {
    break ;
    }
    char chData[10];
    BYTE *chFileData = new BYTE[1024+1];
    int nSize = 0;
    if(!bSend)
    {
    ZeroMemory(chData, 10);
    int nRet = sckClient.Receive(chData, 10);//读文件大小
    if(nRet <= 0)
    {
    bRet = FALSE;
    break ;
    }
    nSize = *((int*)(chData));
    if(nSize <= 0)
    {
    bRet = FALSE;
    break ;
    }
    int nWrite = 0;
    while(nWrite < nSize)
    {
    nRet = sckClient.Receive(chFileData, 1024);
    if(nRet <= 0)
    {
    bRet = FALSE;
    break ;
    }
    file.Write(chFileData, nRet);
    nWrite += nRet;

    bRet = TRUE;
    }
    }
    else
    {
    nSize = file.GetLength();
    int nRead = nSize;
    ZeroMemory(chData, 10);
    memcpy(chData, &nSize, sizeof(int));
    int nRet = sckClient.Send(chData, sizeof(int));
    if(nRet <= 0)
    {
    bRet = FALSE;
    break ;
    }
    while(nRead > 0)
    {
    int n1 = min(nRead, 1024);
    int n2 = file.Read(chFileData, n1);
    nRead -= n2;
    nRet = sckClient.Send(chFileData, n2);
    if(nRet <= 0)
    {
    bRet = FALSE;
    break ;
    }

    bRet = TRUE;
    }
    }
    delete []chFileData;
    }while(0);
    if(sckClient.m_hSocket != INVALID_SOCKET)
    {
    sckClient.Close();
    }
    if(sckServer.m_hSocket != INVALID_SOCKET)
    {
    sckServer.Close();
    }
    if(file.m_hFile != CFile::hFileNull)
    {
    file.Close();
    } return bRet;
    }