socket程式設計標頭檔案和常用函式

2021-05-09 10:13:47 字數 3844 閱讀 9132

sys/types.h:資料型別定義

sys/socket.h:提供socket函式及資料結構

netinet/in.h:定義資料結構sockaddr_in

netdb.h:提供設定及獲取網域名稱的函式

sys/ioctl.h:提供對i/o控制的函式

sys/poll.h:提供socket等待測試機制的函式

其他在網路程式中常見的標頭檔案

unistd.h:提供通用的檔案、目錄、程式及程序操作的函式

errno.h:提供錯誤號errno的定義,用於錯誤處理

fcntl.h:提供對檔案控制的函式

time.h:提供有關時間的函式

crypt.h:提供使用des加密演算法的加密函式

pwd.h:提供對/etc/passwd檔案訪問的函式

shadow.h:提供對/etc/shadow檔案訪問的函式

pthread.h:提供多執行緒操作的函式

signal.h:提供對訊號操作的函式

sys/wait.h、sys/ipc.h、sys/shm.h:提供程序等待、程序間通訊(ipc)及共享記憶體的函式

建議:在編寫網路程式時,可以直接使用下面標頭檔案**

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

涉及到使用者許可權及密碼驗證問題時加入如下語句:

#include

#include

#include

需要注意的是,應該在編譯時鏈結加密演算法庫,即增加編譯選項:

-lcrypt

涉及到檔案及時間操作加入如下語句:

#include

#include

#include

#include

#include

涉及到多程序操作時加入如下語句:

#include

#include

#include

#include

涉及到多執行緒操作時加入如下語句:

#include

#include

需要注意的是,應該在編譯時鏈結執行緒庫,即增加編譯選項:

-lthread

socket程式設計常用函式

struct sockadd

用於bind, connect, recvfrom, sendto

struct sockaddr_in

unsigned char sin_zero[8];

}sample:

struct sockaddr_in sa;

sa.sin_family  = af_inet;

sa.sin_port = htons(3490);

sa.sin_addr.s_addr = inet_addr(」132.241.5.10″);

baero(&(sa.sin_zero),8);

轉換函式:

unsigned long inet_addr(const char *cp);

char* inet_ntoa(strct in_addr in);

位元組順序轉換:

htons()——-host to network short

htonl()——–host to network long

ntohs()——-network to host short

ntohl()——–network to host long

取得本地主機名

int gethostname (char *hostname, size_t size);

取得本地資訊

int  getsockname(int sockfd, struct sockaddr* addr, int * addrlen);

例如:struct sockaddr_in sa;

int len=sizeof(sa);

getpeername(sockfd, (struct sockaddr*)&sa, &len);

printf(」local ip:%s」, inet_ntoa(sa.sin_addr.s_addr));

獲得dns資訊

struct hostent * gethostbyname(const char* name);

struct hostent*  gethostbyaddr(const char* addr, int len, int type);

讀取或改變socker屬性

int getsockopt(int sockfd, int level, int name, char* value, int* optlen);

int setsockopt(…….);

對於socket程式設計:level一般為sol_socket

常用:so_rcvtimeo, so_sndtimeo

so_sndbuf, so_rcvbuf: buffer size

…..網路連線

int socker(int domain, int type, int protocol);

return -1 means error

domain : af_inet

protocol: 一般0

tcp: sockfd = socket(af_inet, sock_stream, 0);

udp: sockfd = socket(af_inet, sock_dgram, 0);

繫結埠

int bind(int sockfd, struct sockaddr *sa, int addrlen);

連線網路(tcp)

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

監聽埠(tcp)

int listen(int sockfd, int queue_length);

響應連線請求(tcp)

int accept(int sockfd, struct sockaddr *addr, int *addrlen);

關閉int close(int sockfd);

int shutdown(int sockfd, int how);

0—-禁接收

1—禁傳送

2—進收發

輪詢int select(int numfds, fd_set *readfds, fd_set * writefds,  fd_set * exceptfds, struct timeval* timeout);

注意windows和unix中,函式返回後fd_set內容發生了改變,下次使用必須重新賦值。

接收和傳送:

tcp: int send(int s, const void* buf, int len, int flags);

int recv(….);

udp: int sendto(int s, const void* buf, int len, int flags, const struct sockaddr* to, int tolen);

int recvfrom(…);

基於訊息的方式:

int sendmsg(int s, const struct msghdr * msg, int flags);

int recvmsg(…);

socket程式設計標頭檔案和常用函式

sys types.h 資料型別定義 sys socket.h 提供socket函式及資料結構 netinet in.h 定義資料結構sockaddr in arpa inet.h 提供ip位址轉換函式 netdb.h 提供設定及獲取網域名稱的函式 sys ioctl.h 提供對i o控制的函式 s...

socket程式設計標頭檔案和常用函式

sys types.h 資料型別定義 sys socket.h 提供socket函式及資料結構 netinet in.h 定義資料結構sockaddr in netdb.h 提供設定及獲取網域名稱的函式 sys ioctl.h 提供對i o控制的函式 sys poll.h 提供socket等待測試機...

socket程式設計標頭檔案和常用函式

sys types.h 資料型別定義 sys socket.h 提供socket函式及資料結構 netinet in.h 定義資料結構sockaddr in arpa inet.h 提供ip位址轉換函式 netdb.h 提供設定及獲取網域名稱的函式 sys ioctl.h 提供對i o控制的函式 s...