Linux 服务器编程
  • Introduction
  • First Chapter
  • 文件I/O
    • 基于文件描述符的I/O操作
      • Linux 文件系统
      • 常用文件操作函数
    • 基于流的I/O操作
  • I/O模型
    • 概念理解
    • 对比五种I/O模型
    • select、poll、epoll简介
  • TCP / IP
    • OSI七层协议模型与TCP/IP四层模型
  • Socket
    • 基础
      • 什么是socket?
      • IPV4 套接口地址结构
      • 网络字节序
      • 字节序转换函数与地址转换函数
    • TCP客户端/服务器模型
    • Socket 相关函数
      • 使用socket()函数创建套接字
      • 使用bind()和connect()函数
      • 使用listen()和accept()函数
      • 使用read()和write()函数
    • 回射客户端/客户端的实现
    • 附录*资料
  • 附录*Linux常见信号
  • 多进程编程
    • 共享内存
    • fork函数
    • fork与vfork的区别
  • 附录*资料
  • 五种I/O模型
Powered by GitBook
On this page
  • 原理图
  • 过程描述:
  • 简单理解:
  • 对服务器端来说
  • 对于客户端来说:

Was this helpful?

  1. Socket

TCP客户端/服务器模型

Previous字节序转换函数与地址转换函数NextSocket 相关函数

Last updated 5 years ago

Was this helpful?

在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户/服务器模式(Client/Server model),即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。

原理图

过程描述:

TCP服务端

(1)启动一个TCP服务器端(也就是一个socket),

(2)bind()绑定端口,绑定服务器地址,绑定ip

(3)listen()监听端口,可监听多个

(4)进入accept状态(阻塞),这是一个while(true)死循环(但是这个死循环会做优化,消化的资源会很少),等待客户端连接

TCP客户端

(1)建立一个socket

(2)connect() 地址 ip 端口,成功连接到服务端,服务端则fork一个子进程来处理

(3)客户端写入数据,服务端就会去读.处理,然后写回客户端

(4)客户端再去读,完成close结束连接

(5)服务端read到客户端已关闭,服务端close关闭.

简单理解:

类比成打电话的过程

对服务器端来说

socket函数:要创建一个套接字(调用socket函数),安装一个电话机

bind函数:为电话机绑定一个号码

listen函数:处于监听的状态

accept函数:等待对方的连接,也就是说等待对方电话拨打过来;如果没有电话拨打过来,就一直阻塞,直到客户端连接到达

read函数:接受客户的请求,并对请求进行处理

write函数:将处理的客户端请求结果返回给客户端,进行数据应答

以上的 read函数 write函数 会因为客户端的循环请求,服务端进行循环的接收处理请求,数据应答过程。

close:服务端read函数读取到了EOF文件描述符,表示对方关闭了连接,也要把自己的一个套接字给关闭掉。

对于客户端来说:

socket函数:要创建一个套接字(调用socket函数),安装一个电话机

connect函数:类似于是拨打对方的电话号码,拨通之后就建立连接,一旦连接建立之后,双方开始就开始进行通信(一问一答的通信)

write函数:向服务端发起请求

read函数:客户端接收服务端的数据应答,紧接着,有可能会再一次的发起另外一个请求(write函数),如图为一个循环

close函数:客户端发起终止(这是一个文件结束的通知),相当于是发送了一个EOF文件描述符,会导致服务端read函数等于0

后续会对函数详细解释。