在程序中
接受邮件功能是在接收邮件按钮的消息响应函数中实现的
该函数名为 OnRecv()
void CRecv::OnRecv()
{
addr.sin_family=AF_INET; //为地址结构中的成员赋值
addr.sin_port=htons(set.m_port);
host=::gethostbyname(set.m_severadd.Getbuffer(1)); //获取主机地址
addr.sin_addr.S_un.S_addr=inet_addr(set.m_severadd.GetBuffer(1));
//转换IP地址
s=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //创建套接字
if(connect(s,(sockaddr*) &addr,sizeof(addr))) //连接服务器
{
::SendMessage(statu,SB_SETTEXT,0,(long)"正在构造请求命令!");
CString str,str1; //定义字符串
GetDlgItem(IDC_ZHANGHU)->GetWindowText(name);//获取用户名
GetDlgItem(IDC_PASS)->GetWindowText(pass); //获取用户密码
str.Format("USER %s",name); //格式化用户名命令字符串
str+="\r\n"; //添加回车换行符
str1.Format("PASS %s",pass); //格式化密码命令字符串
str1+="\r\n"; //添加回车换行符
str+=str1; //连接两个字符串
::SendMessage(statu,SB_SETTEXT,0,(long)"正在发送请求命令!");
//提示用户正在发送命令
send(s,str.GetBuffer(1),sizeof(str),0);//发送命令字符串
char recv[100]={0}; //定义字符串数组用于接收数据
if(recv(s,recv,100,0)) //接收数据
{
if(recv[]=='O'&&recv[1]=='K') //服务器应答成功
{
::SendMessage(statu,SB_SETTEXT,0,(long)"服务器应答成功!");
SendCmdAndRecv(0) //调用自定义函数进行命令发送
}
}
else //接收失败
{
::SendMessage(statu,SB_SETTEXT,0,(long)"接收失败!");
}
}
else //连接失败
{
::SendMessage(statu,SB_SETTEXT,0,(long)"连接失败!");
}
}
在上面代码中
用户首先填充网络地址结构对象addr
然后创建套接字对象s
并且使用该套接字句柄进行连接服务器
如果服务器连接成功
则将构造成功的命令字符串发送到服务器执行
服务器执行成功则会返回字符串OK
接下来程序调用自定义函数SendCmdAndRecv()进行命令的发送