1
.inet_aton
()函式
和inet_ntoa
()函式
#include <
netdb.h
>
intinet_aton
(const char *
cp,struct
in_addr
*inp)
char *
inet_ntoa
(struct
in_addr
in)
inet_aton
()函式將
cp指向的點分十進位制字串型別的
ip位址,轉換為二進位制的
ip位址,轉換後的值儲存在指標
inp指向的結構
structure
in_addr中。
當轉換成功時返回值為非
0,當傳入的位址非法時,返回值為0。
2.inet_pton()函式和inet_ntop()函式
#include <
arpa
/inet.h
>
inet_pton
函式原型如下[將
"點分十進位制
" -> "
整數"]
intinet_pton
(int
af, const char *
src, void *
dst);
這個函式
轉換字串到網路位址,第乙個引數af是位址族(ipv4為af_inet),轉換後存在dst指向的
struct
in_addr
結構體中。
inet_ntop
函式原型如下[將
"整數" -> "
點分十進位制
"]
const char *
inet_ntop
(int
af, const void *
src, char *
dst,
socklen_t
cnt);
這個函式轉換網路
二進位制結構到
ascii
型別的位址,引數的作用和上面相同,只是多了乙個引數
socklen_tcnt,他是所指向快取區dst的大小,避免溢位,如果快取區太小無法儲存位址的值,則返回乙個空指標,並將errno置為enospc。
void initnet()
/******將檔案描述符和伺服器的位址資訊繫結 bind ******/
struct sockaddr_in server_addr; //位址結構
server_addr.sin_family=af_inet; //位址族
server_addr.sin_port=htons(portnum); //埠號必須是網路位元組序
server_addr.sin_addr.s_addr=htonl(inaddr_any);//結構體中的結構體=所有可用ip位址
if(-1==bind(sockfd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr_in)))
/*******定義客戶端最大可連線數目 listen ******/
if(-1==listen(sockfd,10)) }
void accept_client(void)
/**********建立新的執行緒伺服器,單獨為某乙個客戶端服務***********/
pthread_t tid;
if(-1==pthread_create(&tid,null,net_thread,(void *)&new_fd))
}close(sockfd);
}
TCP網路程式設計
基於tcp 通訊模型 由上圖可以得出tcp通訊的步驟如下 服務端 1 建立乙個socket,用函式socket 2 繫結ip位址 埠等資訊到socket上,用函式bind 3 設定允許的最大連線數,用函式listen 4 等待來著客戶端的連線請求,用函式accept 5 收發資料,用函式send 和...
網路程式設計 TCP
客戶端 1.建立客戶端的socket服務,指定目的主機和埠 2.為了傳送資料,應該獲取socket中的輸出流 3.獲取socket中的輸入流來獲取服務端的反饋資料 4.關閉資源 服務端 1.建立服務端的serversocket服務,並監聽乙個埠 2.通過accept方法 等待並獲取連線過來的客戶端s...
網路程式設計 TCP
即有傳送緩衝區 接收緩衝區,傳送次數和接收次數不一定對等。報頭長,成本高,需要搭載更多的資料。1.三次握手 通過對ack的確認,建立可靠連線。有超時重傳機制 2.四次揮手 有可能伺服器處理資料的時間較短,即三次揮手 3.狀態圖 2 保證遲來的資料報能被識別並丟棄 4.tcp狀態轉移過程 5.tcp報...