LINUX学习笔记18——网络编程

来源:岁月联盟 编辑:exp 时间:2012-02-29
a)         Socket:文件描述符
 
1.         作用:实现LINUX的网络编程
 
2.         分类:
 
a)         留式套接字:使用TCP协议(SOCK_STREAM)安全性
 
b)         数据报套接字:使用UDP协议(SOCK_DGRAM)快速
 
c)         原始套接字:使用IP协议:(SOCK_RAW)
 
3.         网络地址:结构体
 
a)         Struct sockaddr
 
1.         {u_short sa_family;  采用哪种协议
 
2.         Char sa_data[14];}   14字节特定协议地址
 
b)         Struct sockaddr_in
 
1.         {u_short sin_family;  采用哪种协议AF_INET
 
2.         Unsigned short int sin_port; 端口号  htons(portnumber)自己定义
 
3.         Struct in_addr sin_addr;  协议特定地址htonl(INADDR_ANY)
 
4.         Unsigned char sin_zero[8];}  没有用,填0
 
4.         地址转换:
 
a)         Int inet_aton(const char *cp, struct in_addr *inp)
 
1.         作用:将IP地址转换为32位的IP
 
b)         Char *inet_ntoa(struct in_addr in)
 
1.         作用:将32位的IP转换为IP地址
 
5.         网络字节序:统一big endian:低位在前,先传输
 
a)         htons: 把unsigned short 类型从主机序转换到网络序
 
b)         htonl: 把unsigned long 类型从主机序转换到网络序
 
c)         ntohs: 把unsigned short 类型从网络序转换到主机序
 
d)         ntohl: 把unsigned long类型从网络序转换到主机序
 
6.         IP与主机名;网络中标识一台主机
 
a)         Struct hostent *gethostbyname(const char *hostname)
 
b)         作用:通过主机名得到IP地址
 
c)         Struct hostent
 
1.         {char *h_name;  :主机正式名称
 
2.         Char *h_aliases  :主机别名
 
3.         Int h_addrtype;   :地址类型
 
4.         Int h_length;     :地址长度
 
5.         Char **h_addr_list;}  :IP地址列表
 
6.         #define h_addr h_addr_list[0]  :主机的第一个IP地址。
 
7.         创建socket:int socket(int domain,int type,int protocol);
 
a)         #include<sys/types.h>,#include<sys/socket.h>
 
b)         Domain:指定使用何种的地址类型,AF_INET Ipv4网络协议
 
c)         Type:SOCK_STREAM 提供双向连续且可信赖的数据流,即TCP
 
d)         Protocol:指定socket所使用的传输协议编号,通常此参考不用管它,设为0即可。
 
e)         返回值:成功则返回socket处理代码,失败返回-1
 
8.         绑定IP与SOCKET:int bind(int sockfd,struct sockaddr * my_addr,int addrlen);
 
a)         #include<sys/types.h>,#include<sys/socket.h>
 
b)         Sockfd:socket的字符,通过socket返回
 
c)         my_addr:网络地址结构体的地址
 
d)         addrlen为sockaddr的结构长度
 
e)         返回值:成功则返回0,失败返回-1,错误原因存于errno中。
 
9.         服务器连接connect:int connect (int sockfd,struct sockaddr * serv_addr,int addrlen);
 
10.     最大连接listen:int listen(int s,int backlog);
 
a)         S:socket字符
 
b)         Backlog:指定同时能处理的最大连接要求
 
c)         返回值:成功则返回0,失败返回-1,错误原因存于errno
 
11.     等待请求accept:int accept(int s,struct sockaddr * addr,int* addrlen);
 
a)         #include<sys/types.h>,#include<sys/socket.h>
 
b)         S:socket字符
 
c)         返回值:返回一个新的socket处理代码,往后的数据传送与读取就是经由新的socket处理,而原来参数s的socket能继续使用accept()来接受新的连线要求。失败返回-1,错误原因存于errno中。连线成功时,参数addr所指的结构会被系统填入远程主机的地址数据
 
12.     发送数据send:int send(int s,const void * msg,int len,unsigned int falgs);
 
a)         #include<sys/types.h>,#include<sys/socket.h>
 
b)         作用:用来将数据由指定的socket 传给对方主机。参数msg指向欲连线的数据内容,参数len则为数据长度。参数flags一般设0
 
c)         返回值:成功则返回实际传送出去的字符数,失败返回-1。错误原因存于errno
 
13.     接收数据recv:int recv(int s,void *buf,int len,unsigned int flags);
 
a)         作用:用来接收远端主机经指定的socket传来的数据,并把数据存到由参数buf 指向的内存空间,参数len为可接收数据的最大长度。
 
b)         #include<sys/types.h>,#include<sys/socket.h>
 
c)         S:socket字符
 
d)         flags一般设0