與socket有關的一些函數介紹

來源:互聯網
上載者:User
1、讀取當前錯誤值:每次發生錯誤時,如果要對具體問題進行處理,那麼就應該調用這個函數取得錯誤碼。

      int  WSAGetLastError(void );      #define h_errno   WSAGetLastError()

錯誤值請自己閱讀Winsock2.h。

2、將主機的unsigned long值轉換為網路位元組順序(32位):為什麼要這樣做呢?因為不同的電腦使用不同的位元組順序儲存資料。因此任何從Winsock函數對IP地址和連接埠號碼的引用和傳給Winsock函數的IP地址和連接埠號碼均時按照網路順序組織的。

      u_long  htonl(u_long hostlong);      舉例:htonl(0)=0      htonl(80)= 1342177280

3、將unsigned long數從網路位元組順序轉換位主機位元組順序,是上面函數的逆函數。

      u_long  ntohl(u_long netlong);      舉例:ntohl(0)=0      ntohl(1342177280)= 80

4、將主機的unsigned short值轉換為網路位元組順序(16位):原因同2:

      u_short  htons(u_short hostshort);      舉例:htonl(0)=0      htonl(80)= 20480

5、將unsigned short數從網路位元組順序轉換位主機位元組順序,是上面函數的逆函數。

      u_short  ntohs(u_short netshort);      舉例:ntohs(0)=0      ntohsl(20480)= 80

6、將用點分割的IP地址轉換位一個in_addr結構的地址,這個結構的定義見筆記(一),實際上就是一個unsigned long值。電腦內部處理IP地址可是不認識如192.1.8.84之類的資料。

      unsigned long  inet_addr( const char FAR * cp );      舉例:inet_addr("192.1.8.84")=1409810880      inet_addr("127.0.0.1")= 16777343

如果發生錯誤,函數返回INADDR_NONE值。

7、將網路位址轉譯位用點分割的IP地址,是上面函數的逆函數。

      char FAR *  inet_ntoa( struct in_addr in );      舉例:char * ipaddr=NULL;      char addr[20];      in_addr inaddr;      inaddr. s_addr=16777343;      ipaddr= inet_ntoa(inaddr);      strcpy(addr,ipaddr); 

這樣addr的值就變為127.0.0.1。
注意意不要修改傳回值或者進行釋放動作。如果函數失敗就會返回NULL值。

8、擷取通訊端的本地地址結構:

      int  getsockname(SOCKET s, struct sockaddr FAR * name, int FAR * namelen );      s為通訊端      name為函數調用後獲得的地址值      namelen為緩衝區的大小。 

9、擷取與通訊端相連的端地址結構:

      int  getpeername(SOCKET s, struct sockaddr FAR * name, int FAR * namelen );      s為通訊端      name為函數調用後獲得的端地址值      namelen為緩衝區的大小。 

10、擷取電腦名稱:

      int  gethostname( char FAR * name, int namelen );      name是存放電腦名稱的緩衝區      namelen是緩衝區的大小      用法:      char szName[255];      memset(szName,0,255);      if(gethostname(szName,255)==SOCKET_ERROR)      {      //錯誤處理      }      傳回值為:szNmae="xiaojin" 

11、根據電腦名稱擷取主機地址:

      struct hostent FAR *  gethostbyname( const char FAR * name );      name為電腦名稱。      用法:      hostent * host;      char* ip;      host= gethostbyname("xiaojin");      if(host->h_addr_list[0])      {      struct in_addr addr;      memmove(&addr, host->h_addr_list[0],4);      //獲得標準IP地址      ip=inet_ ntoa (addr);      }      傳回值為:hostent->h_name="xiaojin"          hostent->h_addrtype=2    //AF_INET          hostent->length=4          ip="127.0.0.1" 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.