上回对这个程序做了个简单的介绍,这回我来讲讲具体实现细节.
首先最主要的是加载套接字库
在StdAfx.h中我们加入如下语句:
#include <afxsock.h>
然后初始化套接字库,在App类中的InitInstance()函数中加入如下语句:
if(!AfxSocketInit())
{
AfxMessageBox("加载套接字库失败!");
return FALSE;
}
需要注意的是当程序连接的时候还要连接Ws2_32.lib这个库.接下来的工作我们都在Dialog的View类中完成,
对于对话框上控件的摆放和命名可自由搭配.其中每个按钮都有命令响应函数.两个进度条分别关联了两个成员变量.剩下的一个ip地址框,三个编辑框,用作用户和程序交流信息.
其中打开文件按钮的命令响应函数如下
void CWinSockDlg::OnOpen()
{
CFileDialog fileDlg(TRUE); //创建打开文件对话框
fileDlg.m_ofn.lpstrTitle="打开文件";
fileDlg.m_ofn.lpstrFilter="All Files(*.*)/0*.*/0/0"; //设定筛选
if(IDOK==fileDlg.DoModal())
{
m_sendfname=fileDlg.GetPathName();
]
//如果用户选择确定设置发送文件名并对对话框显示做响应调整
(GetDlgItem(IDC_EDIT1))->SetWindowText(m_sendfname);
(GetDlgItem(IDC_EDITSEND))->SetWindowText("准备好发送");
}
}
准备接收文件按钮和发送文件按钮响应函数如下
void CWinSockDlg::OnRecv()
{
sockrecv* sr=new sockrecv; //声明一个发送参数结构体