LINUX学习笔记18——网络编程
2038 点击·0 回帖
![]() | ![]() | |
![]() | 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 | |
![]() | ![]() |