在網路中用來描述計算機中不同程式與其他電腦程式通訊的方式。為了區分不同應用程式的程序和連線,需要使用應用程式與tcp/ip協議互動的套接字埠。
主要用到三個引數:通訊的目的ip位址、使用的傳輸協議(tcp或udp)和使用的埠號。
1.套接字相關的資料型別
套接字程式設計是,通常使用sockaddr和sockaddr_in這兩個系統中定義的資料型別結構體。
struct sockaddr
sockaddr_in的功能和sockaddr相同,不同的是ip位址和埠分開為不同的成員。
struct sockaddr_in
in_addr也是個結構體,作用是用來儲存ip位址。
struct in_addr
2.套接字型別
套接字型別指的是在網路通訊中不同的資料傳輸方式:
1. 使用網域名稱獲得主機的ip位址
struct hostent *gethostbyname(const char *name);
struct hostent
例項:
#include
#include
#include
#include
#include
intmain()
else
printf
("-------------------------------\n");
if((host =
gethostbyname
(hostname2))!=
null
)else
return0;
}/*輸出結果
domain name:www.163.com
ip length : 4
type : 2
ip : 228.154.106.0
-------------------------------
domain name: www.sjaife.com
error: 1
operation not permitted
*/
2.用ip位址返回網域名稱
用ip位址可以查詢到這個ip對於的網域名稱,需要使用的是gethostbyaddr()函式;
struct hostent *gethostbyaddr(const void *addr,socklet_t,int type);
type:一般值為af_inet
例項:
#include
#include
#include
#include
#include
intmain()
else
return0;
}
1.將網路位址轉換成長整型數long inet_addr(char *cp);
例項:
#include
#include
#include
#include
intmain()
輸出結果為:16885952
2.將長整型ip位址轉換為網路位址
inet_ntoa()可以將乙個ip型別的結構體轉換成點分十進位制的網路ip位址。
char
*inet_ntoa
(struct in_addr in)
;
例項:
#include
#include
#include
#include
intmain()
輸出結果:192.168
.1.1
在網路程式中,可以使用下面的語句來捕獲發生錯誤的編號。
extern
int h_error;
捕獲這個錯誤編號後,可以用hstrerror()函式輸出這個錯誤資訊:
char
*hstrerror
(int err)
;
例項:
#include
#include
intmain()
}輸出結果:
0: resolver error 0
(no error)
1: unknown host
2: host name lookup failure
3: unknown server error
4: no address associated with name
5: unknown resolver error
Linux UNIX網路程式設計
本書詳細介紹了在unix linux系統下基於tcp ip網路套介面的基本程式設計方法,包括迭代與併發伺服器編寫方法 程序與執行緒程式設計技術 i o程式設計技術 ipv4與ipv6的相容性 原始套介面 資料鏈路訪問技術 廣播與多播技術等。為滿足教學實際需要,在本書最後一章給出了socket基本程式...
Linux UNIX網路程式設計筆記(四) UDP程式設計
udp客戶 伺服器的套接字函式 recvfrom 函式 接收資料,類似標準read include include ssize t recvfrom int sockfd,void buf,size t len,int flags,struct sockaddr from,size t addrle...
網路程式設計入門
網路程式設計本質上要做的事情就是交流,我們先來分析一下人與人交流,見上圖,我們發現人與人的通訊是分層結構的,這裡以乙個人對另乙個人說 hello world!為例。1 乙個人說了 hello world!後它就是乙個資訊,這個是資訊首先可以直接說出來,我們也可以使用暗號來代替。這就是說資訊可以選擇明...