首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

Visual C++网络编程案例详解中的邮件收发器编程?解决办法

2012-08-03 
Visual C++网络编程案例详解中的邮件收发器编程?我按照清华大学出版社的Visual C++网络编程案例详解这本书

Visual C++网络编程案例详解中的邮件收发器编程?
我按照清华大学出版社的Visual C++网络编程案例详解这本书在做邮件收发器的实现,可是书上代码有些错误,下的附带源代码也不全,自己改了下编译成功了,但是却实现不了发送和接收功能,有人实现过吗,如果可以能把实现的代码发给我下吗?邮箱是:dingjinghua2010qiu@163.com感激不尽啊!另外底下是发送和接收部分的代码,能帮着看下也成。
  发送部分:
 

C/C++ code
void CMyDlg::OnSendmail() {    // TODO: Add your control notification handler code here    // TODO: Add your control notification handler code herechar buf[4];//定义缓冲区CString  data="Data:Tue,04,June 2012.5.17,21:15:01+0800\r\n";//构造发送字符串CString  sender="MAIL FROM:";CString  recver="RCPT TO:";CString  subject="Subject:";CString l,r,sl,mailtext;GetDlgItem(IDC_SENDER)->GetWindowText(l);//获取控件内容GetDlgItem(IDC_RECVER)->GetWindowText(r);GetDlgItem(IDC_SUBJECT)->GetWindowText(sl);GetDlgItem(IDC_MAILTEXT)->GetWindowText(mailtext);sender+=l;//添加获取内容recver+=r;subject+=sl;CString sendmail[8];sendmail[0]="HELO";//构造发送数组sendmail[1]=*sender.GetBuffer(1);sendmail[2]=*recver.GetBuffer(1);sendmail[3]="DATA\r\n";//发送DATA命令sendmail[4]=*subject.GetBuffer(1);sendmail[5]=*mailtext.GetBuffer(1);sendmail[6]="QUIT\r\n";//退出会话sendmail[7]= "\0";send(s,*sendmail,sizeof(sendmail),0);recv(s,buf,4,0);//接受响应数据if(buf!=NULL)//是否接收到数据{         if ( (atoi)(buf)==250 )    ::SendMessage(statu,SB_SETTEXT,0,(long)"邮件发送成功!");    else    ::SendMessage(statu,SB_SETTEXT,0,(long)"邮件发送失败!");}else{::SendMessage(statu,SB_SETTEXT,0,(long)"邮件正在发送");}}

接收部分:
C/C++ code
void CRecv::OnRecv() {    // TODO: Add your control notification handler code heresockaddr_in addr;addr.sin_family=AF_INET;//为地址结构中的成员赋值CSet set;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地址int s;s=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//创建套接字if(connect(s,(sockaddr*)&addr,sizeof(addr)))//连接服务器 statu=::CreateStatusWindow(WS_CHILD|WS_VISIBLE,"",this->m_hWnd,1008);::SendMessage(statu,SB_SETTEXT,0,(long)"构造请求命令!");CString str,strl;//定义字符串GetDlgItem(IDC_ZHANGHU)->GetWindowText(name);//获取用户名GetDlgItem(IDC_PASS)->GetWindowText(pass);//获取用户密码str.Format("USER &s",name);//格式化用户名命令字符串str+="\r\n";//添加回车换行符str+=strl;//连接两个字符串::SendMessage(statu,SB_SETTEXT,0,(long)"正在发送请求命令!");//提示用户正在发送命令send(s,str.GetBuffer(1),sizeof(str),0);//发送命令字符串char recvbuffer[100]={0};//定义字符数组用于接收数据if(recv(s,recvbuffer,100,0))//接收数据{   if (recvbuffer[0]=='O'&&recvbuffer[1]=='K')//服务器应答成功  {   ::SendMessage(statu,SB_SETTEXT,0,(long)"服务器应答成功!");    SendCmdAndRecv(0);//调用自定义函数进行命令发送  }   else//接收失败  {::SendMessage(statu,SB_SETTEXT,0,(long)"接收失败!");  }}else//连接失败{::SendMessage(statu,SB_SETTEXT,0,(long)"连接失败!");}}void CRecv::SendCmdAndRecv(int x){n=x;//将参数值赋予该类中的变量nCString str;//定义字符串用于构造命令char recvdata[1024]={0},ch[1024],ch2[1024];//接收数据数组str.Format("retr d%,n");//格式化字符串str+="\r\n";//添加回车换行符int s;s=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//创建套接字send(s,str.GetBuffer(1),sizeof(str),0);//发送获取邮件命令if (recv(s,recvdata,1024,0))//接收数据{if(recvdata[0]=='O'&&recvdata[1]=='K')//接收成功{    recvdata[sizeof(recvdata)+1 ]='\0';//将字符数组转换为字符串    mailadd=recvdata;    while(i=mailadd.Find("from:")!=-1 || i<mailadd.Find("\r\n"))//循环查找    {    ch[i++]=recvdata[i++];//拷贝字符    }     GetDlgItem(IDC_NAME)->SetWindowText(ch);//设置发送者邮件地址       if(i=mailadd.Find("\n")!=-1)//查找空行    {    ch2[i++]=recvdata[i++];//拷贝字符    GetDlgItem(IDC_EDIT1)->SetWindowText(ch2);//显示邮件内容   }}else{MessageBox("接收失败!");}}}

 



[解决办法]
失败的代码是多少,查一下说明;

[解决办法]
http://blog.csdn.net/agoago_2009/article/details/7265709
[解决办法]
http://download.csdn.net/download/chelp/3881684

热点排行