程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> 服務器與客戶機互傳消息

服務器與客戶機互傳消息

編輯:C語言基礎知識
  一、 服 務 器 程 序
   創 建 一 個 名 為“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 ";
           pView ->InvalidateRect(NULL);
           }
           else
           {switch(msg[0])
           {
           case  ‘A':
           wsprintf(msg,“A:Client from %s attached ",
                  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 ->
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved