Linux網絡編程常用文件
=====常用Linux網絡編程頭文件====
sys/types.h:數據類型定義
sys/socket.h:提供socket函數及數據結構
netinet/in.h:定義數據結構sockaddr_in
arpa/inet.h:提供IP地址轉換函數
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 <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <malloc.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <stdarg.h>
#include <fcntl.h>
===========================================================
涉及到用戶權限及密碼驗證問題時加入如下語句:
#include <shadow.h>
#include <crypt.h>
#include <pwd.h>
需要注意的是,應該在編譯時鏈接加密算法庫,即增加編譯選項: -lcrypt
===========================================================
涉及到文件及時間操作加入如下語句:
#include <sys/time.h>
#include <utime.h>
#include <time.h>
#include <sys/stat.h>
#include <sys/file.h>
===========================================================
涉及到多進程操作時加入如下語句:
#include <sys/wait.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <signal.h>
===========================================================
涉及到多線程操作時加入如下語句:
#include <pthread.h>
#include <sys/poll.h>
需要注意的是,應該在編譯時鏈接線程庫,即增加編譯選項: -lthread
===========================================================
socket編程常用函數
struct sockadd {
unsigned short sa_family;
char sa_data[14];
}
用於bind, connect, recvfrom, sendto
struct sockaddr_in {
short int sin_family; //AF_INET unsigned short int sin_port;
//網絡字節順序
struct in_addr sin_addr;
//struct in_addr {
unsigned long s_addr;
}
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″);
bzero(&(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);
//獲取socket對端的地址信息(TCP)
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
sys/types.h:數據類型定義
sys/socket.h:提供socket函數及數據結構
netinet/in.h:定義數據結構sockaddr_in
arpa/inet.h:提供IP地址轉換函數
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 <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <malloc.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <stdarg.h>
#include <fcntl.h>
===========================================================
涉及到用戶權限及密碼驗證問題時加入如下語句:
#include <shadow.h>
#include <crypt.h>
#include <pwd.h>
需要注意的是,應該在編譯時鏈接加密算法庫,即增加編譯選項: -lcrypt
===========================================================
涉及到文件及時間操作加入如下語句:
#include <sys/time.h>
#include <utime.h>
#include <time.h>
#include <sys/stat.h>
#include <sys/file.h>
===========================================================
涉及到多進程操作時加入如下語句:
#include <sys/wait.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <signal.h>
===========================================================
涉及到多線程操作時加入如下語句:
#include <pthread.h>
#include <sys/poll.h>
需要注意的是,應該在編譯時鏈接線程庫,即增加編譯選項: -lthread
===========================================================
socket編程常用函數
struct sockadd {
unsigned short sa_family;
char sa_data[14];
}
用於bind, connect, recvfrom, sendto
struct sockaddr_in {
short int sin_family; //AF_INET unsigned short int sin_port;
//網絡字節順序
struct in_addr sin_addr;
//struct in_addr {
unsigned long s_addr;
}
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″);
bzero(&(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);
//獲取socket對端的地址信息(TCP)
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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.