linux---网络编程

目录

一、网络协议

OSI七层协议模型 

TCP/IP四层协议模型 

二、客户端和服务器的创建步骤

三、socket编程预备知识

1、端口号 -- port

3、套接字 -- socket

4、字节序

四、网络编程相关接口函数

1、创建套接字 -- socket

2、绑定ip地址和端口号 -- bind

 3、设置监听套接字 -- listen

 4、等待客户端连接 -- accpet

5、向服务器发起连接 -- connect

一、网络协议

OSI七层协议模型 

应用层:用户能够看见的内容

表示层:对数据进行加密、解析

会话层:建立通信节点

传输层:实现点对点的通信

网络层:路由寻址

数据链路层:将数据封装成对应的帧格式,纠错、流控

物理层:屏蔽硬件差异

TCP/IP四层协议模型 

应用层:HTTP(超文件传输协议)、FTP(文件传输协议)、NSF(网络挂载协议)、SSH(远程登录协议)

传输层:TCP协议、UDP协议

网络层:IP协议,ICMP协议、IGMP协议(组播、广播)

物理与网络接口层:以太网协议、ARP协议(IP -->MAC)、RARP协议(MAC --> IP)、PPP

二、客户端和服务器的创建步骤

以下图片是通过打电话的例子来说明客户端和服务器的创建步骤

三、socket编程预备知识

1、端口号 -- port

一个端口对应一个进程

本质上是一个 unsigned short类型的数据

                 取值范围: 0 ~ 65535

                             0:不能使用

                   1~1023:系统端口,一般不使用

             1024~5000:常用的应用程序接口

           5001~65535:用户可以使用的端口

3、套接字 -- socket

本质是一个特殊的按顺序分配的最小的文件描述符;

4、字节序

数据在内存存储的方式

       大端序(网络字节序):高位的数据存放在低位

       小端序(主机字节序):高位的数据存放在高位

字节序转换 -- 在给端口号赋值时,需要将端口号先转换成网络字节序再赋值

字节序转换相关函数:

                 htons(port) -- 将主机字节序转换为网络字节序

                 ntohs(port) -- 将网络字节序转换为主机字节序

四、网络编程相关接口函数

1、创建套接字 -- socket

   #include <sys/types.h>         
   #include <sys/socket.h>

   int socket(int domain, int type, int protocol);
   参数:
   domain:  地址族 //每一个不同的协议,地址结构不同
   		AF_UNIX: 域套接字
   		AF_INET: IPV4协议   //PF_INET
   		AF_INET6:IPV6协议
   type:套接字类型
   		SOCK_STREAM:流式套接字 -- 唯一对应tcp通信
   		SOCK_GDRAM:数据报套接字 -- 唯一对应udp通信
   protocol:
   		默认值填0;
   
   返回值:
   		成功返回套接字,失败返回-1; 

2、绑定ip地址和端口号 -- bind

   #include <sys/types.h>         
   #include <sys/socket.h>    
   #include <netinet/in.h>
   #include <netinet/ip.h> 

   int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
   参数:
   	sockfd:socket创建得到的套接字
   	addr:
   		服务器的地址结构首地址
	addrlen:
		服务器地址结构的大小
   
   返回值:
   	 成功返回0,失败返回-1;
   	
   IPV4对应的地址结构:
   	
   struct sockaddr_in {
        sa_family_t    sin_family; /* address family: AF_INET */
        in_port_t      sin_port;   /* port in network byte order */
        struct in_addr sin_addr;   /* internet address */
   };
           
   struct in_addr {
        uint32_t       s_addr;     /* address in network byte order */
   };
			
   s_addr才是绑定ip地址的变量	
		   
   例:
		struct sockaddr_in saddr;
		saddr.sin_family = AF_INET; //ipv4协议
		saddr.sin_port = 8888;   //设置端口号为8888
		saddr.sin_addr.s_addr = inet_addr("192.168.7.220"); //将点分十进制的地址转换为整型再赋值

 3、设置监听套接字 -- listen

   #include <sys/types.h>          /* See NOTES */
   #include <sys/socket.h>

   int listen(int sockfd, int backlog);
   参数:
   	sockfd:套接字
   	backlog:客户端连接的最大等待队列长度
   
   返回值:成功返回0,失败返回-1;

 4、等待客户端连接 -- accpet

   #include <sys/types.h>          /* See NOTES */
   #include <sys/socket.h>

   int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
   参数:
   	sockfd:socket创建得到的套接字
   	addr:
   		客户端的地址结构首地址
   	addrlen:
   		客户端地址结构的长度的首地址
   	 
   返回值:
   	成功返回一个新的套接字(读写套接字),该套接字用于服务器的数据读写,失败返回-1

5、向服务器发起连接 -- connect

   #include <sys/types.h>          /* See NOTES */
   #include <sys/socket.h>

   int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
   参数:
   	sockfd:套接字
   	addr:
   		服务器的地址结构的首地址
   	addrlen:
   		服务器地址结构的大小 
   返回值:
   		成功返回0,失败返回-1;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值