网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.(05)第五章 数组和广义表 题.
.WAP,C++ 及其它.......
.Snake.Net中的线性表.
.C趣味编程百例(32).
.编程入门:浅谈C语言的可变参数.
.3. 关键字和标识符.
.C++中用赋值形式op=取代单独形式.
.文件加锁的例题示范.
.BCB控件制作和消息处理.
.关于makefile.
.新手入门:C/C++中枚举类型(enum).
.eclipse 下用cdt插件开发c c++程.
.C++信徒的摩西十戒.
.1.4 Turbo C 2.0的安装和启动.
.水滴石穿C语言之typedef的问题.
.C++内存管理详解.
.VC命名管道通信的实现.
.如何获取屏幕保护程序的密码.
.嵌入式程序员应知道的几个基本问.
.使用Eclipse3.01 + MinGW3.1配置.

服务器与客户机互传消息

发表日期:2008-3-8



  一、 服 务 器 程 序
创 建 一 个 名 为“server" 的 项 目, 单 文 档 界 面。
在serverview.h 中 加 入 代 码:
           #include “winsock.h"
      添 加 变 量:
            CSize       sizeTotal;// 控 制 滚 动 条
            int   count;// 信 息 条 数
            CString m_data[1000];// 信 息 存 放
            char    Hostname[260];
            char  Hostaddress[20];// 主 机IP 地 址
            SOCKET      m_sock;
            HANDLE      m_hListenThread;// 线 程
            BOOL  m_bInitialized;// 是 否 初 始 化
            WSADATA     WSAData;
            BOOL  flag;
            SOCKADDR_IN saClnt;
            int   saClntLen;
            BOOL  Isconnect;// 是 否 连 接    

在serverview.cpp 中 重 载CServerView() 构 造 器, 创 建 并 绑 定 嵌 套 字:
      CServerView::CServerView()
{     // TODO: add constrUCtion code here
      Isconnect=FALSE;
      flag=FALSE;
      sizeTotal.cy=350;
      sizeTotal.cx=300;
      m_hListenThread;
      count=5;
      int status;
      WSADATA wsaData;
   m_data[0]=“initializing Windows Sockets DLL....";
      if((status=WSAStartup(0x0101, &wsaData))==0)
      {     m_data[0] +=“Succeeded";
            m_bInitialized=TRUE;

      }
      else
      {     m_bInitialized=FALSE;
      }
      m_sock=socket(AF_INET,SOCK_DGRAM,0);
      m_data[1]=“Creating socket....";
      if(m_sock==INVALID_SOCKET)
      {     m_data[1] +=“Failed";
      }
      m_data[1] +=“Succeeded";
      m_data[2]=“Binding socket....";
      sockaddr_in sa;
      sa.sin_family=AF_INET;
      sa.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
      sa.sin_port=htons(5050);
      if(bind(m_sock,(PSOCKADDR)
     &sa,sizeof(sa))==SOCKET_ERROR)
      {     m_data[2] +=“Failed";
            closesocket(m_sock);
      }
      m_data[2] +=“Succeeded";
      m_data[3]=“Creating listener thread....";
      unsigned long idThread;
m_hListenThread=CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)Listen,
(void        if(m_hListenThread)
      {     m_data[3] +=“Succeeded";
            m_data[4] +=“Listening....";
      }
      else
            m_data[4] +=“Failed";
}

在 析 构 函 数 中 完 成 必 需 的 清 除 操 作:
      CServerView:: ~CServerView()
{     if(m_bInitialized)
      WSACleanup();
      closesocket(m_sock);
      if(m_hListenThread)
      ::TerminateThread(m_hListenThread,0);
}     

定 义 接 收 和 处 理 消 息 的 线 程:
      long WINAPI Listen(CServerView *pView)
{     char msg[2000]=“";

      int   nchar;
      SOCKADDR_IN saClnt;
      int saClntLen;
      while(1)
      { saClntLen=sizeof(saClnt);
        nchar=recvfrom(pView ->m_sock,msg,1024,0,
(PSOCKADDR) &saClnt, &saClntLen);
        if(nchar<0)
        {     pView ->m_data[pView ->count + +] +
             =“Error in recvfrom\n";
        pView ->InvalidateRect(NULL);
        }
        else
        {switch(msg[0])
        {
        case  ‘A':
        wsprintf(msg,“A:Client from %s attached\n",
               inet_ntoa(saClnt.sin_addr));
        pView ->m_data[pView ->count + +]=msg;
        pView ->flag=TRUE;
        pView ->InvalidateRect(NULL);
        pView ->Isconnect=TRUE;
        pView ->saClnt=saClnt;
        pView ->saClntLen=saClntLen;
        sendto(pView ->
上一篇:非安全编程演示之高级篇 人气:738
下一篇:分而治之算法---残缺棋盘 人气:814
浏览全部C/C++的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐