2017-03-07 140 views
0

struct sockaddr_in servaddr, cliaddr;
我是套接字編程的新手。
這個語句在c編程中的socket編程是什麼意思?
我們是否正在創建一個名爲sockaddr_in的結構體,並且是servaddrcliaddr的成員?爲什麼他們的數據類型沒有提到?什麼結構「sockaddr_in servaddr,clientaddr;」意思?

回答

3

這個語句在c編程中的socket編程是什麼意思?

它聲明瞭類型爲struct sockaddr_in的兩個未初始化變量。

我們是否正在創建一個名爲sockaddr_in的結構?

不需要。它必須已經定義來聲明變量,或者您的程序不合格。

並且是servaddrcliaddr的成員?

沒有。

爲什麼他們的數據類型沒有提到?

它是。看到你的第一個問題的答案。

1

在Unix套接字,頭netinet/in.h定義structsockaddr_in,這樣的事情:

struct sockaddr_in { 
    short   sin_family; // e.g. AF_INET, AF_INET6 
    unsigned short sin_port;  // e.g. htons(3490) 
    struct in_addr sin_addr;  // see struct in_addr, below 
    char    sin_zero[8]; // zero this if you want to 
}; 

struct in_addr { 
    unsigned long s_addr;   // load with inet_pton() 
}; 

(參考:http://beej.us/guide/bgnet/output/html/multipage/sockaddr_inman.html

servaddrcliaddr是您的sockaddr_in型結構的名稱。他們兩人(至少在Unix中)有四名成員(short sin_family等)。 (其中一名成員爲struct類型in_addr稱爲sin_addr被定義夫婦後來有一個成員unsigned long s_addr線。還有一個原因,一個結構與只有一個成員,你可以找到在計算器解釋過。)

如果你想使用sockaddr_in,你必須#include <netinet/in.h>或Windows等效的netinet/in.h(除非你自己定義結構)。