第三章 套介面程式設計簡介

2021-06-01 06:21:32 字數 1733 閱讀 3614

套介面程式設計簡介

ipv4套介面位址結構通常也稱為「網際套介面位址結構」

其結構是:

structsockaddr_in

sin_len 是不需要設定的,其中需要sin_family = af_inet網際協議族,sin_port 是網路位元組序的埠,sin_addr 是網路位元組的主機位址,sin_zero是不用設定的,主要是在使用這個位址的時候,全部要置為0,

structsockaddr

和上面的struct sockaddr_t所佔的位元組數相同,都是16位元組

such as:

intbind(int fd,sockaddr *addr,socklen_t);

當使用bind進行繫結的時候,就需要吧sockaddr_t轉化成sockaddr(因為內部大小是相同的)

3 從程序到核心傳遞套介面的函式有bind connect sendto這些函式的第三個函式是告訴核心需要在應用層拷貝多少位元組數

從核心到程序(應用層)的位址的拷貝有 accept recvfrom getsocketnamegetpeername,

sockaddr_incli;

socklen_tlen;

len =sizeof(cli);

getpeername(fd,(sockaddr*)&cli, &len)

其中len當傳遞到核心是告訴核心,我現在需要拷貝到cli中的位元組數,使用指標是為了核心告訴應用層說我核心實際的位元組數

3 對於某個作業系統是採用大段還是小端儲存的乙個好辦法就是使用union

#include using namespace std;

int main()

un;un.c = 0x0102;

if(sizeof(short) == 2)

{if(un.s[0] == 1 && un.s[1] == 2)

{cout<

一些主機位元組序到網路位元組序的轉化函式如下:

uint16_thtons(uint16_t );

uint32_thtonl(uint32_t );

uint16_tntohs(uint16_t );

uint32_tntohl(uint32_t );

三個伯克利記憶體操作的函式是:

voidbzero(void* dst, size_t size);是將dst指定的size個位元組初始化為0

voidbcopy(const void* src, void *dst, size_t size); 是將src拷貝到dst,拷貝的個數是size

intbcmp(const void*ptr1, const void*ptr2, size_t size); 比較ptr1,ptr2 的個數是size

三個ansic的記憶體操作的函式是:

memsetmemcopy memcmp

intinet_aton(const char * str, struct in_addr* addptr)

char*inet_ntoa(struct in_addr* addr);

是支援ipv4 ipv6的

測試是不是套接字函式int isfdtype(int fd,int fdtype)返回值是1是該型別0不是

fdtype 可設定成s_ifsock

網路程式設計第三章 套接字程式設計簡介

include unp.h struct in addr struct sockaddr in tcp或者埠總是以網路位元組序來儲存 套接字位址結構僅僅在給定主機上使用,雖然某些字段用於通訊,但是結構本身並不用於通訊 通用套接字位址結構 作為引數傳遞任何套接字函式的時候,套接字總是以引用的方式傳遞,...

程式設計珠璣第三章

第三章寫的有點太簡單了,可能作者是想在後面章節裡再詳細說吧!這一章就是作者說的幾句話印象還是很深刻。程式設計師在節省空間方面無計可施時,將自己從 中解脫出來,退回起點並記者並集 中精力研究資料,常常能有奇效。資料的 表示形式是程式設計的根本。正如人月神話的作者說 只要給我你設計的表,我就對你的程式一...

第三章 函式程式設計

函式是一段具有特定功能的 可重用的語句組,用函式名來表示並通過函式名進行功能呼叫。函式也可以看作是一段具有名字的子程式 特性 1.減少重複 2.使程式變的可擴充套件 3.使程式變得易維護 語法定義 def sayhi 函式名 print hello,i m nobody sayhi 呼叫函式 可以帶...