C++:使用CSocket进行文件传送
有两个函数,一个用于服务端,用于文件的发送,一个用于客户端,用于文件的接受,只能进行小文件传送。
下面给出服务器端发送所用函数代码:
void SendFile() { #define PORT 34000 /// 自定义端口
AfxSocketInit(NULL);
CSocket sockSrvr;
sockSrvr.Create(PORT); // 创建socket
sockSrvr.Listen(); // 监听端口
CSocket sockRecv;
sockSrvr.Accept(sockRecv);
CFile myFile; myFile.Open("C:\\test.dat", //发送的文件路径
CFile::modeRead | CFile::typeBinary);
int myFileLength = myFile.GetLength();
sockRecv.Send(&myFileLength, 4);
byte* data = new byte[myFileLength];
myFile.Read(data, myFileLength);
sockRecv.Send(data, myFileLength);
myFile.Close();
delete data;
sockRecv.Close();
}
以下是客户端代码接受所用函数:
void GetFile() { #define PORT 34000 /// 自定义端口
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);
byte* data = new byte[dataLength];
sockClient.Receive(data, dataLength);
CFile destFile("C:\\temp\\test.dat",//保存的文件路径
CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
destFile.Write(data, dataLength);
destFile.Close();
delete data;
sockClient.Close();
}
最后要注意的是,因为没有添加判断代码,所以确保函数SendFile()先运行,然后再运行GetFile()
作者“ 李木空间 ”
补充:软件开发 , C++ ,