LINUX学习笔记18——网络编程
来源:岁月联盟
时间:2012-02-29
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
上一篇:LINUX学习笔记17——多线程