| 查看: 204 | 回复: 0 | |||
| 当前主题已经存档。 | |||
zsglly木虫 (著名写手)
|
[交流]
使用CSockets进行文件传送
|
||
|
这是一对实现在两台计算机间传送文件的函数,我没有看到过使用CSocket进行文件传送的代码,希望此代码对你有用.代码中包含两个函数,第一个用于服务器端,第二个用于客户端. 需要说明的是本文提供的方法并不适用于大型文件的传送. 下面给出服务器端代码: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.EXE", 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.EXE", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary); destFile.Write(data, dataLength); // Write it destFile.Close(); delete data; sockClient.Close(); } 最好确认服务器端函数在客户端函数之前运行,本文的代码可以方便地添加到工程中,解决服务器/客户模型中的文件传送问题. 感谢大家! [ Last edited by 幻影无痕 on 2006-11-29 at 07:45 ] |
» 猜你喜欢
考研复试调剂,过国家线的同学都可报名
已经有5人回复
085600 英一数二272求调剂
已经有13人回复
理学,工学,农学调剂,少走弯路,这里欢迎您!
已经有5人回复
接收调剂
已经有7人回复
一志愿华南理工大学材料与化工326分,求调剂
已经有3人回复
290求调剂
已经有5人回复
清华大学 材料与化工 353分求调剂
已经有4人回复
材料284求调剂,一志愿郑州大学英一数二专硕
已经有12人回复
化学,材料,环境类求调剂
已经有3人回复
材料化工调剂
已经有14人回复














回复此楼
5