欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言 sockaddr和sockaddr_in案例詳解

 更新時間:2021年08月16日 15:27:11   作者:阿卡基YUAN  
這篇文章主要介紹了C語言 sockaddr和sockaddr_in案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

struct sockaddr 和 struct sockaddr_in 這兩個結(jié)構(gòu)體用來處理網(wǎng)絡(luò)通信的地址。

一、sockaddr

sockaddr在頭文件#include <sys/socket.h>中定義,sockaddr的缺陷是:sa_data把目標(biāo)地址和端口信息混在一起了,如下:

struct sockaddr {  
     sa_family_t sin_family;//地址族
    char sa_data[14]; //14字節(jié),包含套接字中的目標(biāo)地址和端口信息               
   }; 

二、sockaddr_in

sockaddr_in在頭文件#include<netinet/in.h>或#include <arpa/inet.h>中定義,該結(jié)構(gòu)體解決了sockaddr的缺陷,把port和addr 分開儲存在兩個變量中,如下: 

這里寫圖片描述

sin_port和sin_addr都必須是網(wǎng)絡(luò)字節(jié)序(NBO),一般可視化的數(shù)字都是主機(jī)字節(jié)序(HBO)。

三、總結(jié)

二者長度一樣,都是16個字節(jié),即占用的內(nèi)存大小是一致的,因此可以互相轉(zhuǎn)化。二者是并列結(jié)構(gòu),指向sockaddr_in結(jié)構(gòu)的指針也可以指向sockaddr。

sockaddr常用于bind、connect、recvfrom、sendto等函數(shù)的參數(shù),指明地址信息,是一種通用的套接字地址。 

sockaddr_in 是internet環(huán)境下套接字的地址形式。所以在網(wǎng)絡(luò)編程中我們會對sockaddr_in結(jié)構(gòu)體進(jìn)行操作,使用sockaddr_in來建立所需的信息,最后使用類型轉(zhuǎn)化就可以了。一般先把sockaddr_in變量賦值后,強(qiáng)制類型轉(zhuǎn)換后傳入用sockaddr做參數(shù)的函數(shù):sockaddr_in用于socket定義和賦值;sockaddr用于函數(shù)參數(shù)。

例子如下:

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
 
int main(int argc,char **argv)
{
    int sockfd;
    struct sockaddr_in mysock;
 
    sockfd = socket(AF_INET,SOCK_STREAM,0);  //獲得fd
 
    bzero(&mysock,sizeof(mysock));  //初始化結(jié)構(gòu)體
    mysock.sin_family = AF_INET;  //設(shè)置地址家族
    mysock.sin_port = htons(800);  //設(shè)置端口
    mysock.sin_addr.s_addr = inet_addr("192.168.1.0");  //設(shè)置地址
    bind(sockfd,(struct sockaddr *)&mysock,sizeof(struct sockaddr); /* bind的時候進(jìn)行轉(zhuǎn)化 */
    ... ...
    return 0;
}

題外話,兩個函數(shù) htons() 和 inet_addr()。

htons()作用是將端口號由主機(jī)字節(jié)序轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)序的整數(shù)值。(host to net)

inet_addr()作用是將一個IP字符串轉(zhuǎn)化為一個網(wǎng)絡(luò)字節(jié)序的整數(shù)值,用于sockaddr_in.sin_addr.s_addr。

inet_ntoa()作用是將一個sin_addr結(jié)構(gòu)體輸出成IP字符串(network to ascii)。比如:

printf("%s",inet_ntoa(mysock.sin_addr));

htonl()作用和htons()一樣,不過它針對的是32位的(long),而htons()針對的是兩個字節(jié),16位的(short)。

與htonl()和htons()作用相反的兩個函數(shù)是:ntohl()和ntohs()。 

這里寫圖片描述

到此這篇關(guān)于C語言 sockaddr和sockaddr_in案例詳解的文章就介紹到這了,更多相關(guān)C語言 sockaddr和sockaddr_in內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中測試程序運行時間的幾種方法總結(jié)

    C++中測試程序運行時間的幾種方法總結(jié)

    本文介紹了C++中測量程序運行時間的幾種方法,包括使用GetTickCount()、clock()、Boost庫的timer類以及高精度時控函數(shù)QueryPerformanceFrequency和QueryPerformanceCounter,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • 通過c++的sort函數(shù)實現(xiàn)成績排序功能

    通過c++的sort函數(shù)實現(xiàn)成績排序功能

    這篇文章主要介紹了通過c++的sort函數(shù)實現(xiàn)成績排序,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 在輸入輸出字符串時scanf(),printf()和gets(),puts()的區(qū)別淺談

    在輸入輸出字符串時scanf(),printf()和gets(),puts()的區(qū)別淺談

    在輸入輸出字符串時scanf(),printf()和gets(),puts()的區(qū)別淺談,需要的朋友可以參考一下
    2013-02-02
  • C++11 并發(fā)指南之std::mutex詳解

    C++11 并發(fā)指南之std::mutex詳解

    這篇文章主要介紹了C++11 并發(fā)指南之std::mutex詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 詳解Ubuntu18.04配置VSCode+CMake的C++開發(fā)環(huán)境

    詳解Ubuntu18.04配置VSCode+CMake的C++開發(fā)環(huán)境

    這篇文章主要介紹了詳解Ubuntu18.04配置VSCode+CMake的C++開發(fā)環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • c++讀取和寫入TXT文件的整理方法

    c++讀取和寫入TXT文件的整理方法

    今天小編就為大家分享一篇c++讀取和寫入TXT文件的整理方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • c++和python實現(xiàn)順序查找實例

    c++和python實現(xiàn)順序查找實例

    這篇文章主要介紹了c++和python實現(xiàn)順序查找實例,流程即將目標(biāo)數(shù)值和數(shù)據(jù)庫中的每個數(shù)值進(jìn)行比較,如果相同則搜索完成,如果不同則繼續(xù)比較下一處,下面來看看具體的實例操作吧,需要的朋友可以參考一下
    2022-03-03
  • 用C語言實現(xiàn)從文本文件中讀取數(shù)據(jù)后進(jìn)行排序的功能

    用C語言實現(xiàn)從文本文件中讀取數(shù)據(jù)后進(jìn)行排序的功能

    這是一個十分可靠的程序,這個程序的查錯能力非常強(qiáng)悍。程序包含了文件操作,歸并排序和字符串輸入等多種技術(shù)。對大家學(xué)習(xí)C語言很有幫助,有需要的一起來看看。
    2016-08-08
  • C++ boost::asio編程-同步TCP詳解及實例代碼

    C++ boost::asio編程-同步TCP詳解及實例代碼

    這篇文章主要介紹了C++ boost::asio編程-同步TCP詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • 如何在 C++ 中實現(xiàn)一個單例類模板

    如何在 C++ 中實現(xiàn)一個單例類模板

    這篇文章主要介紹了如何在 C++ 中實現(xiàn)一個單例類模板,幫助大家更好的理解和學(xué)習(xí)c++編程,感興趣的朋友可以了解下
    2020-10-10

最新評論