Visual C++网络编程经典案例详解 第7章 邮件收发器 接收邮件 实现接收邮件功能

本文详细介绍了如何在Visual C++中实现网络编程的经典案例——邮件收发器,特别是接收邮件的功能。在OnRecv()消息响应函数中,通过填充网络地址结构,创建并连接套接字,当连接成功后,发送命令字符串到服务器,服务器返回'OK',再利用SendCmdAndRecv()函数完成命令交互。

在程序中
接受邮件功能是在接收邮件按钮的消息响应函数中实现的
该函数名为 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()进行命令的发送

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值