我对SOCKET了解得不多,总认为SOCKET只能用来传送字符串,他能不能传送流文件呢?例如我想将A.doc文件传送给另一方该怎么样做呢?请给出原代码,谢谢

解决方案 »

  1.   

    流文件也不是由字符组成吗?
    把文件分成一个个小包(缓冲区)发过去就可以了.下面给出服务器端代码:void SendFile()
    {
     #define PORT 34000 /// Select any free port you wish AfxSocketInit(NULL);
     CSocket sockSrvr; 
     sockSrvr.Create(PORT); // Creates our server socket
     sockSrvr.Listen(); // Start listening for the client at PORT
     CSocket sockRecv;
     sockSrvr.Accept(sockRecv); // Use another CSocket to accept the connection
     CFile myFile;
     myFile.Open("C:\\ANYFILE.doc", CFile::modeRead | CFile::typeBinary);  int myFileLength = myFile.GetLength(); // Going to send the correct File Size sockRecv.Send(&myFileLength, 4); // 4 bytes long

     byte* data = new byte[myFileLength];  myFile.Read(data, myFileLength); sockRecv.Send(data, myFileLength); //Send the whole thing now myFile.Close();
     delete data; sockRecv.Close();
    }
    以下是客户端代码 void GetFile()
    {
     #define PORT 34000 /// Select any free port you wish AfxSocketInit(NULL);
     CSocket sockClient;
     sockClient.Create(); // "127.0.0.1" is the IP to your server, same port
     sockClient.Connect("127.0.0.1", PORT);  int dataLength;
     sockClient.Receive(&dataLength, 4); //Now we get the File Size first

     byte* data = new byte[dataLength];
     sockClient.Receive(data, dataLength); //Get the whole thing CFile destFile("C:\\temp\\ANYFILE.doc", 
      CFile::modeCreate | CFile::modeWrite | CFile::typeBinary); destFile.Write(data, dataLength); // Write it destFile.Close(); delete data;
     sockClient.Close();
    }