当前位置:编程学习 > C/C++ >>

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++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,