Windows網路編程

來源:互聯網
上載者:User
文章目錄
  • 一、Winsock初始化
  • 二、IPv4結構體
  • 三、建立通訊端
  • 四、伺服器需要調用的的函數及步驟
  • 五、用戶端需要調用的函數及步驟
 一、Winsock初始化

      每個Winsock程式都必須載入合適的Winsock DLL版本,現有winsock1,winsock2。在調用Winsock之前首先的工作就是載入winsock相應的庫。
      載入所用的API是WSAStartup 
      當應用程式結束之後,關閉的API是WSACleanup

     WSAStartup需要一個版本號碼資訊及一個WSADATA的結構體作為函數的傳回值。它的原型是這樣的:

int WSAStartup(WORD wVersionRequested,
         LPWSADATA lpWSAData);

    下面, 看一下WSAData結構體究竟描述了些什麼資訊:
typedef struct WSAData
{
    WORD wVersion; //版本號碼
     WORD wHighVersion; //現有Winsock的最高版本
     char szDescription[..]; //沒有實際作用
     char szSystemStatus[..]; //沒有實際作用
     unsigned short iMaxSocket; //可同時開啟的最大通訊端數量
     unsigned short iMaxUdpDg; //資料報最大長度
     char FAR* lpVendorInfo; //保留欄位 
}WSADATA* LPWSADATA

    具體的代碼:
   

#include "winsock2.h"
int main()
{
    WSADATA wsaData;
    int Ret = WSAStartup(MAKEWORD(2,2),&wsaData);
    if(Ret != 0)
    {
      cout<<"無法初始化winsock."<<endl;
    }
    else
      cout<<"初始化winsock成功"<<endl;

     //..
 
     if(WSACleanup()==SOCKET_ERROR)
     {
       cout<<"WSAData無法cleanup.";
     }
     return 0;
}

 

二、IPv4結構體

       當電腦通過TCP、UDP進行通迅時,用得最多的可能就是其主機的IP地址,應用程式的連接埠號碼。如何來表示這些資訊呢?在Winsock中,可以通過一個結構體來指定其IP和服務連接埠的資訊。結構體如下:
   

struct sockaddr_in
{
 short sin_family; //必須指定AF_INET
     u_short sin_port; //連接埠號碼
      struct in_addr sin_addr; //IP的地址表示
     char sin_zero[8]; //填充欄位,用來相容SOCKADDR結構體
};

還有一些其它的函數,可以很方便的進行IP地址至字串形式,32位整行形式 in_addr結構體形式的轉換。還有的,可以把本地位元組順序與網路位元組順序進行轉換
     1.把一個點分IP轉換成一個32位無符號長整型:
         unsigned long inet_addr(const char FAR* cp);
     2.將主機位元組順序轉換為網路位元組順序
        u_long htonl(u_long hostlong);  
        int  WSAHtonl(SOCKET s, u_long hostlong, u_long FAR* lpnetlong);
        u_short htons(u_short hostshort);
        int WSAHtons(SOCKET s,u_short hostshort, u_short FAR* lpnetshort);
     以上有不同的只是有些位元組需要轉換為long型,比如IP地址,有些只需要short型就可以了,比如PORT號.
     而與上面逆向的函數則有:
        u_long ntohl(u_long netlong);
       int WSANtohl(SOCKET s, u_long netlong, u_long FAR* lphostlong);
      //關於short型的,這裡略

三、建立通訊端四、伺服器需要調用的的函數及步驟五、用戶端需要調用的函數及步驟六、資料轉送與接收
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.