linux網路程式設計

2021-09-12 06:49:30 字數 4495 閱讀 9493

網路基本原理:

五層協議模型:物理層,負責傳輸位元

資料鏈層 負責相鄰裝置間的通訊

網路層 負責不同主機之間的通訊

傳輸層 負責兩台主機中程序之間的通訊

應用層為應用程序提供服務

將不同地點的計算機,在網路軟體的支援下,實現資訊交換和共享的系統

modem 將計算機的數碼訊號翻譯成可沿線路傳送的模擬訊號。

網頁瀏覽的工作原理?

電子郵件的工作原理?

網路協議的名陳?

什麼是網路協議?

什麼是埠號?

mac是什麼?

什麼socket? 描述ip位址和埠邏輯通訊鏈的控制代碼。

什麼是ip位址?internet 主機作為路由定址用的數字標識

傳輸層為相互通訊的應用程序提供端到端的邏輯通訊;

埠是應用層的各種協議程序與運輸實體進行層間互動的一種位址。

規定資訊的格式以及如何傳送和接受資訊的一套規則。

網路中傳輸的二進位制資料具體含義和作用的上下文

套接字=(ip+埠)

int socket(int family,int type, int protocol);

建立乙個通過tcp/ip協議socket 返回描述符

1 協議族 af-inet

2 型別

3 協議型別 0

int close(int socket);

關閉套接字

unsigned long int htonl(unsigned long int hostlong);

unsigned short int htons(unsigned short int hostshort);

unsigned long int ntohl(unsigned long int netlong);

unsigned short int ntohs(unsigned short int netshort);

h表示host,n表示network,s表示short,l表示long

void * memset(void *dest, int ch, size_t len);

void * memcpy(void *dest, const void *src, size_t nbytes);

int memcmp(const void *ptr1, const void *ptr2, size_t nbytes);

void bzero(void *dest, size_t nbytes);

等價於memset(dest, 0, nbytes);

int inet_aton(const char *strptr, struct in_addr *addrptr);

返回值:字串有效返回1,否則返回0

ssize_t read(int fd, void *buf, size_t count);

ssize_t write (int fd,const void * buf,size_t count);

ssize_t recv(int sockfd, void *buff,size_t nbytes,int flags);

ssize_t send(int sockfd, const void *buff,size_t nbytes,int flags);

flags一般取0,

也可取send、recv為

socket專用

對於tcp而言read、

recv返回0表示

遠端socket已關閉

pdu 協議資料單元。

tcp/ip協議族使用位址結構是什麼?分別有哪些重要成員?

位元組序是怎麼回事?網路位元組序採用的是哪種位元組序?

如何根據網域名稱得到ip位址?

ip位址有幾種表示方法?

int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);

功能:通過三路握手建立與tcp伺服器的連線

int sockfd;

struct sockaddr_in servaddr;

sockfd = socket(af_inet,sock_stream,0);//建立套接字

bzero(&servaddr, sizeof(servaddr));

servaddr.sin_family = af_inet; //指定協議族

servaddr.sin_port = htos(***); //指定伺服器端口號

inet_aton(「a.b.c.d」, &servaddr.sin_addr);//指定伺服器ip位址

//通過三路握手連線伺服器

connect(sockfd, (struct sockaddr *)&servaddr, sizeof(struct sockaddr_in));

//……資料傳輸

close(sockfd);//關閉套接字

int bind(int sockfd, const struct sockaddr * myaddr, socklen_t addrlen);

功能:將本地協議位址賦予指定的socket描述符

返回值:成功為0,失敗 < 0

引數:sockfd: socket函式返回的socket描述符

myaddr:指向與協議族相符的位址結構指標

addrlen:實際位址結構的大小

int listen(int sockfd, int backlog);

功能:將主動套接字改為被動套接字(用來接受指向該套接字的連線請求),並設定套接字排隊的最大連線個數。

int accept(int sockfd, struct sockaddr * cliaddr, socklen_t * addrlen);

功能:從已完成連線佇列的對頭返回乙個已完成連線,佇列空則阻塞等已完成連線

返回值:成功返回已完成連線對應的socket描述符,伺服器通過這個描述符與請求連線的客戶端進行資料傳輸。失敗 < 0

引數:sockfd:監聽套接字(即伺服器用來處理連線請求專用的被動套接字)。

cliaddr:返回已連線的對端程序(客戶端)的協議位址。

addrlen:值-結果引數,呼叫前指定cliaddr的位址結構長度,返回後儲存

對應位址結構的確切位元組數。

注意監聽套接字與已連線套接字的區分。

如果不關心客戶端位址cliaddr和addrlen可以置為null。

int listenfd, connfd;

socklen_t len;

struct sockaddr_in servaddr, cliaddr;

listenfd = socket(af_inet, sock_stream, 0);//

bzero(&servaddr, sizeof(servaddr));//

servaddr.sin_family = af_inet;

inet_aton(「a.b.c.d」, &servaddr.sin_addr)

servaddr.sin_port = htons(***);

bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr));

listen(listenfd, yyy);

while(1)

close(listenfd);

int sockfd;

struct sockaddr_in servaddr, cliaddr;

socklen_t cliaddrlen = sizeof(struct sockaddr_in);

sockfd = socket(af_inet,sock_dgram,0);//建立套接字

bzero(&servaddr, sizeof(servaddr));

servaddr.sin_family = af_inet; //指定協議族

servaddr.sin_port = htos(***); //指定伺服器端口號

inet_aton(「a.b.c.d」, &servaddr.sin_addr);//指定伺服器ip位址

bind(sockfd,(struct sockaddr *)&servaddr,sizeof(struct sockaddr_in));

while(1)

close(sockfd);//關閉套接

int sockfd;

struct sockaddr_in servaddr;

sockfd = socket(af_inet,sock_dgram,0);//建立套接字

bzero(&servaddr, sizeof(servaddr));

servaddr.sin_family = af_inet; //指定協議族

servaddr.sin_port = htos(***); //指定伺服器端口號

inet_aton(「a.b.c.d」, &servaddr.sin_addr);//指定伺服器ip位址

while(1)

close(sockfd);//關閉套接字

Linux網路程式設計

linux網路程式設計 當然,我們現在,將要開始編寫的第乙個網路程式,雖然非常簡單,但是卻可以很 清楚的說明大部分編寫網路程式需要的基本概念,好了先讓我們看看網路程式的tcp服 務器端的編寫步驟 1.和伺服器的步驟一樣。2.通過設定套介面位址結構,我們說明,客戶端要與之通訊的伺服器的ip位址和 埠。...

linux 網路程式設計

當然,我們現在,將要開始編寫的第乙個網路程式,雖然非常簡單,但是卻可以很 清楚的說明大部分編寫網路程式需要的基本概念,好了先讓我們看看網路程式的tcp服 務器端的編寫步驟 現在讓我們來看看網路程式客戶端的程式設計步驟 以上的步驟,是比較普遍的,我們可以從中看出,編寫網路程式是很有意思的,同 時,也不...

linux 網路程式設計

套接字程式設計 struct sockaddr unsigned short sa family 位址協議,ipv4 tcp ip af inet,ipv6 af inet6 char sa data 14 14位元組的位址協議 struct sockaddr in unsigned short s...