| 查看: 203 | 回复: 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 ] |
» 猜你喜欢
264求调剂
已经有4人回复
化工专硕342,一志愿大连理工大学,求调剂
已经有6人回复
材料调剂
已经有7人回复
材料工程专硕283求调剂
已经有4人回复
求调剂
已经有7人回复
274求调剂
已经有7人回复
0856材料与化工,270求调剂
已经有8人回复
材料学硕318求调剂
已经有6人回复
欢迎采矿、地质、岩土、计算机、人工智能等专业的同学报考
已经有7人回复
材料学硕318求调剂
已经有14人回复














回复此楼
5