服务器概览

本文详细阐述了服务器与客户端在通信过程中的区别和交互步骤。服务器通过等待连接模块监听客户端请求,创建套接字并接受连接,实现多任务、多线程处理。客户端则通过创建套接字、连接服务器、收发数据及断开连接来完成通信。服务器端的套接字和端口号管理确保了并发连接的高效处理。
摘要由CSDN通过智能技术生成

客户端与服务器的区别

  • 根据用途,服务器可以分为很多种类,其硬件和操作系统与客户端是有所不同的。但是,网络相关的部分,如网卡、协议栈、Socket库等功能和客户端却并无二致。
  • 服务器的程序可以同时和多台客户端计算机进行通信

服务器程序的结构

  • 当服务器程序启动并读取配置文件完成初始化操作后,就会运行等待连接模块(a),这个模块会创建套接字,然后进入等待连接的暂停状态。
  • 当客户端连发起连接时,这个模块会恢复运行并接受连接,然后启动客户端通信模块(b),并移交完成连接的套接字。
  • 每次有新的客户端发起连接,都会启动一个新的客户端通信模块(b),因此(b)与客户端是一对一的关系
  • 服务器操作系统具有多任务、多线程功能,可以同时运行多个程序
  • 事先启动几个客户端通信模块,当客户端发起连接时,从空闲的模块中挑选一个出来将套接字移交给它来处理。
    在这里插入图片描述

服务器端的套接字和端口号

客户端的数据收发(调用Socket库)
  • 创建套接字(创建套接字阶段)
  • 用管道连接服务器端的套接字(连接阶段)
  • 收发数据(收发阶段)
  • 断开管道并删除套接字(断开阶段)
服务器端的数据收发(调用Socket库)
  • 创建套接字(创建套接字阶段)
    调用Socket创建套接字
  • 将套接字设置为等待连接状态(等待连接阶段)
    调用bind将端口号写入套接字中,端口号取决于服务器的种类,Web服务器使用80号端口
  • 接受连接(接受连接阶段)
    调用listen向套接字写入等待连接状态
    调用accept来接受连接。服务器端处于等待包到达的状态,应用程序会暂停运行。在这个状态下,一旦客户端的包到达,就会返回响应包并开始接受连接操作。协议栈会给等待连接的套接字复制一个副本,然后将连接对象等控制信息写入新的套接字中。
    在这里插入图片描述
  • 收发数据(收发阶段)
    等待连接模块会启动客户端通信模块,然后将连接好的新套接字转交给客户端通信模块
    原来的那个套接字:还会以等待连接的状态继续存在,当再次调用accept,客户端连接包到达时,它又可以再次执行接受连接操作。接受新的连接之后,和刚才一样,协议栈会为这个等待连接的套接字复制一个新的副本,然后让客户端连接到这个新的副本套接字上
    新创建的套接字副本必须和原来等待连接的套接字具有相同的端口号,根据客户端IP地址、客户端端口号、服务器IP地址、服务器端口号
    还需要描述符
    在这里插入图片描述
    在这里插入图片描述
  • 断开管道并删除套接字(断开阶段)
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值