2024年3月11日发(作者:)

建议读者再看实验步骤之前,先阅读一下文章末尾的【注意事项】一节。这将有助

于更好的理解本章的实现。

一.单线程文件传输 (I):

·服务器端(负责发送数据)的实现

1. 建立一个基于对话框的工程Server,并在建立的过程中选择支持windows

socket。

2. 在对话框上添加“发送”按钮。

3. 为“发送”按钮添加事件BN_CLICKED的响应函数OnSend()。

void CServerDlg::OnSend()

{

// TODO: Add your control notification handler code here

CFileDialog fd(TRUE); // CFileDialog是MFC提供的一个用于选择文件

的对话框类

CString filename;

char fn[40];

CSocket listenSocket, socketSend;

CFile file;

long FileLength;

char* data;

存空间

if(IDOK==l()) // 启动用于选择文件的对话框

{

//选择了文件

filename=eName(); // 获取用户选择的文件的文件名

if(!(fer(0),CFile::modeRead| File::typeBinary))

{

AfxMessageBox(" 打开文件错误,取消发送!");

return;

}

strcpy(fn,fer(0));

}

else return; //按了取消按钮

(7000,SOCK_STREAM);

(5);

(socketSend);

FileLength = gth(); // 获取文件的长度

(&FileLength, 4); // 把要发送的文件的长度传送给对方

(fn,40); // 发送要传送的文件的文件名

data = new char[FileLength]; //分配一块和要传输的文件一样大小的内

ge(data, FileLength); //把文件中所有的数据一次性读入

data

}

(data, FileLength); //把data中的数据都发送出去

();

delete data;

();