关闭

研一暑假没有回家,做的第一个小东西

299人阅读 评论(0) 收藏 举报

是本科毕业的暑假做的,是我们现在做的实验室路由器仿真软件的一小小小小模块,但是是我第一次用VC做东西,也学到了很多东西,比如说第一次来做网络编程的东西,第一次做多线程的东西,虽然很小,但是通过动手,还是发现,哎,书上的东西和真正动手,差别太大了,而且发现自己动手能力是如此之差!!恼火!!

做的是一个SMTP协议来实现,目的是给网路不断的增加压力,发送SMTP数据包,并统计出来发送的数据量的大小,而且这个程序还有很多不完善的地方,不过是本人第一个小小小小项目,嘿嘿,还是把它贴出来吧。

PS:嘿嘿,肯定是要参考些东西的,所以在这里把那些参考资料也贴出来,如果是幸运的转载了某位牛人的帖子,请不要见怪,我也都是GOOGLE的

下面是我的代码: 

上面是程序运行图,下面是些核心代码,关于上面涉及到的组件什么的就不写了。


/*================================线程函数==========================================*/

UINT MyEventThread(void *pstring)
{
 CTestDlg *hWnd = (CTestDlg *)pstring;//自定义函数中获取系统指针;

 //smtp协议格式的前几个重要的字节填充;
 CString Serv = "EHLO"+hWnd->m_Server+"/r/n";

 CString From = "MAIL FROM :<"+hWnd->m_From+">/r/n";

 CString To = "RCPT TO :<"+hWnd->m_To+">/r/n";

 CString Text = hWnd->m_Message+"/r/n/r/n./r/n";
 
 //定义一个数组,来获取输入的格式字节;

 char *MailMessage[]=
 {
    Serv.GetBuffer(1),
     From.GetBuffer(1),
     To.GetBuffer(1),
     "DATA/r/n",
     Text.GetBuffer(1),
     "QUIT/r/n",
     NULL
   };


 //winsock的初始化及链接函数;

 WSADATA Wsa;

 WSAStartup(0x0101,&Wsa);

 SOCKET s = socket(AF_INET,SOCK_STREAM,0);

 SOCKADDR_IN sin;
 sin.sin_addr.s_addr=inet_addr(hWnd->m_Server);

 sin.sin_family=AF_INET;
 sin.sin_port=htons(25);

 if(connect(s,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR)
  MessageBox(NULL,"Error:can't connect to server","Error",MB_OK|MB_ICONERROR);//如果链接不起的话;
 

    int iLength=0;
    int iEnd=0;
    char sBuff[255]="";
    int iMsg=0;
   
              
    while(MailMessage[iMsg])//发送smtp数据包;
    {
     iLength=recv(s,(LPSTR)sBuff+iEnd,sizeof(sBuff)-iEnd,0);
     iEnd+=iLength;
     sBuff[iEnd]='/0';

     for(;;)//循环,不断的发送数据包以增加网络压力;
     {
     send(s,(LPSTR)MailMessage[iMsg],strlen(MailMessage[iMsg]),0);
     iTotal=send(s,(LPSTR)MailMessage[iMsg],strlen(MailMessage[iMsg]),0);
     
     hWnd->m_Len+=iTotal;//自定义的变量,以统计发送的数据包大小;
     }

     iMsg++;
    }
   

    closesocket(s);
    WSACleanup();

 
 return 0;
}
/*================================启动线程==========================================*/
void CTestDlg::OnOK()
{
 // TODO: Add extra validation here

 
 AfxBeginThread(MyEventThread,(void *)this); //调用自己编写的线程函数;
 

}


/*================================停止线程==========================================*/
void CTestDlg::OnEventThread()
{
 // TODO: Add your control notification handler code here

 
    UpdateData(FALSE);//统计发送数据量;

 iTotal=0;//重新初始化,以便重新启动线程以计数;
    m_Len=0; 
}

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2054次
    • 积分:53
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章存档