Linux系统编程之网络编程

网络套接字TCP/IP
OSI七层协议:
应用层
表示层
会话层
网络层
传输层
数据链路层
物理层

TCP/IP四层协议:
应用层
传输层
网络层
网络接口层


服务端流程:
1.创建套接字文件
int socket(int domain, int type, int protocol);
domain:协议域即协议族(IP协议):AF_INET - IPV4协议
Type:套接字类型: 流式 socket(SOCK_STREAM)---tcp 
Protocol:传输层协议,直接给0,当protocol(协议)为0时,会自动根据套接字类型来选传输层协议
2.绑定三要素:协议族、ip地址、端口号
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

struct sockaddr_in {// man 7 ip才能看到
               sa_family_t    sin_family; /* address family地址族:我们这里用的是 AF_INET */
               in_port_t      sin_port;   /* port in network byte order 16bit端口号*/  ---  htons(); 
               struct in_addr  sin_addr;   /* internet address 32bitIP地址*/ inet_addr()
           };
   struct in_addr {
In_addr_t        s_addr; //32bit IPv4地址
}
3.设置监听数
int listen(int sockfd, int backlog);
4.等待连接
 int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
5.接收与发送
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
6.关闭套接字文件
close(sockfd)
客户端流程:
1.创建套接字文件

2.绑定三要素:协议族、ip地址、端口号(绑定服务端的)

3.请求连接
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
4.接收与发送
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
5.关闭套接字文件
close(fd)

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATGlsT25lMTIz,size_20,color_FFFFFF,t_70,g_se,x_16

 


版权声明:本文为LilOne123原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。