Socket编程

这个写的好,看这个!
socket编程
在这里插入图片描述

应用编程接口API(Applicayion Programming Interface)

是一个应用进程的控制权和操作系统的控制权进行转换的一个系统调用接口。应用层与传输层需要一个接口,起到连接作用,连接应用进程和操作系统。

典型的API:

  • UNIX的 socket interface
  • windows 的WINSOCK
  • UNIX 的TLI(Transport Layer Interface)

Socket API

在这里插入图片描述
对外(例如客户机向服务器发送客户机想要连接的端口)标识通信端点:

  • IP地址+端口号

对内(例如客户机对自己的套接字的管理)操作系统进程管理套接字:

  • 套接字描述符(一个进程创建一个套接字,的同时还会返回以一个套接字描述符)

Socket抽象:

  • 类似于文件的管理(在UNIX中套接字和文件一样)
  • 当应用进程创建套接字时,操作系统会分配一个数据结构存储套接字的相关信息
  • 同时返回套接字描述符
    在这里插入图片描述
    通常(在TCP/IP中)把IP地址+ 端口号成为端点地址。当使用套接字进行通信的时候就需要指定套接字的本地地址和远程地址。

socket地址结构

已经定义的结构socketaddr_in:
在这里插入图片描述
地址族的定义使得不同协议都可以使用socket套接字进行通信,也进而导致了地址长度变量的出现,因为不同的协议地址长度一般不同。现在的TCP/IP的地址族都写AF_INET。

socket API 函数

Win socket的实现机制是:Windows操作系统的动态连接库方式。

在这里插入图片描述

1.WSAtratup

在这里插入图片描述

2.WSACleanup

在这里插入图片描述

3.socket

在这里插入图片描述

Socket 面向TCP/IP的服务类型:

在这里插入图片描述

4.Closesocket

在这里插入图片描述

5.bind

在这里插入图片描述

6.listen

在这里插入图片描述

7.connect

仅用于客户端,在这里插入图片描述

8.accept

多线程进行,TCP是点对点的,如果没有accept创建的新的套接字的话,那么服务器端的应用进程就只能给一个客户端服务器。
在这里插入图片描述

网络字节顺序(协议头中的二进制整数都用它表示)

因此一些套接字的API函数需要存储为网络字节顺序
在这里插入图片描述

基本流程

在这里插入图片描述

客户端软件的设计

解析服务器的IP地址

在这里插入图片描述

解析服务器的端口号

在这里插入图片描述

解析协议号

在这里插入图片描述

TCP客户端历程(真正的与服务器建立连接)

  • 确定服务器的IP地址和端口号
  • 创建套接字
  • 分配本地端点地址(IP + 端口号)
  • 连接服务器
  • 遵循应用层协议进行通信
  • 关闭释放连接

UDP的客户历程(只是确定服务器的位置)

  • 确定IP地址与端口号
  • 创建客户端套接字
  • 分配端点地址
  • 指定服务器的端点地址,构造UDP数据报。
  • 遵循应用层协议
  • 释放套接字

服务器软件设计

1.循环无连接服务器

一次只处理一个客户,采用UDP。
基本流程:

  • 创建套接字
  • 绑定端点地址
  • 反复接受来自客户的请求
  • 遵循应用层协议,构造响应报文,发给客户端

数据的发送:

  • 连接服务器connect( )
  • 不连接服务器sendto()

获取客户端点地址:

  • 用recvfrom( ) 接受数据,自动提取。

2.循环面向连接服务器

基本流程:

  • 创建套接字
  • 绑定端点地址
  • 设置主套接字为被动监听模式,准备用于服务器
  • 调用accept()函数接受下一个连接的请求(通主套接字),创建新套接字与客户建立连接。
  • 遵循应用层协议,反复接受客户请求,构造并发送响应
  • 完成客户的服务后,关闭之间的连接,返回第三步。

3.并发无连接服务器

并发无连接服务器流程:

  • 创建套接字,绑定端口号
  • 反复的调用recvfrom()函数,接受下一个客户的请求,并创建新新线程处理该用户的响应(一直进行)
  • 子线程接受特定的请求
  • 子线程依据应用程的协议构造响应报文,调用sendto()发送。
  • 子线程完成服务后关闭。

4.并发面向连接服务器

基本流程:

  • 创建套接字,绑定端口号
  • 设置主套接字为被动监听模式,准备用于服务器
  • 反复的调用accept()函数接受下一个连接请求,创建一个新的子线程处理该用户的响应
  • 遵循应用层协议,反复接受客户请求,构造并发送响应
  • 完成客户的服务后,关闭之间的连接
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值