GB | BIG5
|
| 首頁 > 編程技術 > 網絡編程 > 正文 |
 |
| 套接口編程基礎 |
| 本文出自:http://sunsland.top263.net 作者: (2001-10-22 10:00:00) |
IPv4 套接口地址結構
struct in_address {
in_addr_t s_addr ;
}
// 32bits IPv4 地址
//網絡字節順序 Network Byte Order
struct sockaddr_in{
unit8_t sin_len; //長度成員, 無需設置
sa_family_t sin_family; //套接口結構地址族,AF_INET
in_port_t sin_port; //16位TCP 或 UDP 端口號
struct in_addr sin_addr; //32位TCP 或 UDP 端口地址
char sin_zero[8]; //未用
}
//in: internet
//s: socket
--------------------------------------------------------------------------------
通用套接口地址結構
套接口地址結構僅在給定主機上使用。結構中的某些成員(IP地址和端口號)用在不同主機
間的通信中,但結構本身並不參與通信.
當作為參數傳遞給任一個套接口函數時,套接口地址結構總是通過指針來傳遞,但通過指
針來取得此參數的套接口函數必須處理來自所支持的任何協議族的套接口地址結構.
通用套接口結構
struct sockaddr{
uint8_t sa_len;
sa_family_t sa_family;
char sa_data[14]
};
通用的套接口地址結構的用途:給指向持定協議的地址結構的指針轉換類型。
--------------------------------------------------------------------------------
強制類型轉換
函數的調用:
將指向特定協議的套接口地址結構的指針類型-> 指向通用套接口地址結構的指針。
函數原型:
int connect( int, struct sockaddr *, socklen_t)
..............
struct sockaddr-in servaddr;
..................
connect(sockfd,(sturct sockaddr *) &servaddr, sizeof(servaddr));
.....................
--------------------------------------------------------------------------------
字節排序函數
一個16位整數,它由2個字節組成。
內存中存儲這兩個字節有兩種方法:
小端字節序:低序字節存儲在起始地址
大端字節序:高序字節存儲在起始地址
網際協議必須指定一個網絡字節序(Network Byte Order)
主機字節序和網絡字節序的轉換函數:
#include <netinet/in.h>
unit16_t htons(uint16_t host16bitvalue);
unit32_t htons(uint32_t host32bitvalue);
unit16_t ntohs(uint16_t net16bitvalue);
unit32_t ntohs(uint32_t net32bitvalue);
h : host
n : network
s : short (16 bits)
l : long (32 bits)
--------------------------------------------------------------------------------
字節/字節流操縱函數
void bzero(void *dest,size_t nbytes);//清零
void bcopy(const void *src,void *dest,siz_t nbytes);
int bcmp(const void *ptr1,const void *ptr2,size_t nbytes);
返回:0相等,非0不相等
void *memset(void *dest,int c,size_t len);
void *memcpy(void *dest,const void *src,size_t nbytes);
it memcmp(const void *ptr1,const void *ptr2,size_t nbytes);
返回:0相同,非0不相同
字節流讀寫函數
ssize_t readn(int filedes, void * buff, size_t nbytes);
ssize_t writen(int filedes, const void *buff, size_t nbytes);
ssize_t readline(intfiledes, void *buff, size_t maxlen);
--------------------------------------------------------------------------------
地址轉換函數
#include <arpe/inet.h>
int inet_aton(const char *strptr,struct in_addr *addrptr);
返回:1串有效,0串出錯
in_addr_t inet_addr(const char *strptr);
返回:若成功,返回32位二進制的網絡字節序地址;若出錯,則返回INADDR_NONE
char *inet_ntoa (struct in_addr inaddr);
返回:指向點分十進制數串指針
ine-aton 將 strptr 所指的C字符串轉換成32位的網絡字節序二進制值並通過指針
addrptr來存儲。如果成功返回1,否則返回0。
inet-addr 將 strptr 所指的C字符串轉換成32位的網絡字節序二進制值並通過涵數值返回。
函數inet-ntoa將一個32位的網絡字節序二進制IPv4地址轉換成相應的點分十進制數串。
如: 202.116.34.194.4000 (IP:202.116.34.194 端口4000)
可用 IPv4 和 IPv6的函數
int inet_pton(int family,const char *strptr,void *addrptr);
const char *inet_ntop(int family.const void *addrptr,char *strptr,size_t len);
p: presentation 地址的表示 202.116.34.194
n: numeric 數值格式 16bits/32bits integer
family : AF_INET 或 AF_INET6
(http://www.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
基本UDP套接口編程 (2001-10-23 10:00:00) 套接口選項 (2001-10-23 09:00:00) 基本TCP套接口編程二 (2001-10-22 15:00:01) 基本TCP套接口編程一 (2001-10-22 12:00:00) 套接口編程基礎 (2001-10-22 10:00:00) UNIX的套接口(Socket)編程簡介 (2001-04-19 12:48:30)
|
|
|
|
 |
★ 樊強制作 歡迎分享 ★ |