网络通信接口-Socket

要了解网络通信,就要了解Socket是什么;

Socket的起源

最初是为Unix系统开发的网络通信接口;
计算机上可以有多个网络应用程序,为了区分不同的应用程序进程,找到正在进行网络通信的进程,就需要通过socket来标识;
同时,socket可以用来发送和接受数据包;
客户端和服务器端的一个通信进程,需要两个进程组成,双方通过socket进行通信,并且通信的规则只能采用同一种协议;

什么是Socket?

socket,也叫套接字,是网络通信架构的基础;网络协议很多都是基于socket的;

通信接口

  • 本质是编程接口(API),应用层和传输层之间的接口;
  • 是对TCP/IP的封装,也就是TCP/IP提供给程序员做网络开发所用的接口,是目前支持TCP/IP协议网络通信最为通用的API;
  • 通过socket,可以跳过复杂的网络底层协议和结构,直接编写与平台无关的应用程序;

抽象端点

  • 它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口;
  • 用于描述IP地址和端口,由IP地址和端口号唯一确定;

*TCP/IP协议:不单指TCP和IP两个协议,而是包括多个其他的协议,只是TCP和IP最具代表性,所以用来命名而已;

Socket的作用

通过端口来标识进程

不同的网络应用程序有不同的端口,通过“网络地址+端口号”的标识方法,可以唯一标识计算机上的应用程序;

实现进程间的数据传输

  • 不仅支持异地进程的通信,也支持本地进程的通信;
  • 在端口与端口之间以流stream的方式传输数据;(因为任何二进制数据都可以保存到流中,所以Socket可以在客户端与服务器之间传输任何形式的数据)
  • 是应用程序用来在网络上发送或接收数据包的对象;(向网络发出请求或者应答网络请求)

Socket的分类

这里只介绍常用的两种分类:

  1. Stream Socket(字节流Socket),最常用的套接字类型,面向连接,主要用于TCP服务应用;
  2. Datagram Socket (数据报Socket),无连接,主要应用于UDP服务应用;传输不保证顺序性、可靠性和无重复性,通常用于单个报文传输或可靠性不重要的场合。

Socket的应用

进程间的通信

  • 建立网络通信连接至少要一对端口号(socket);
  • 进程通信前,双方首先必须各自创建一个socket, 正如打电话之前,双方必须各自拥有一台电话机一样;
  • 网络通信通常被放到单独的线程中:即除了游戏的主线程之外,还会有一个发送协议的线程,和一个接收协议的线程;

服务端和客户端的通信

TCP传输:

首先服务器创建一个负责监听的socket,然后客户端创建一个socket(需要绑定服务器端的IP和端口)进行服务器连接,当服务器端监听到有客户端连接过来时,就创建一个负责和客户端通信的新的socket,通过该socket发送消息给客户端并接受客户端的消息,一旦客户端确认连接,则连接建立;

UDP传输:

不太区分服务器端和客户端,AB两端都需要创建一个绑定本地IP和端口的socket;
两端都可以给指定另一端IP和端口的IPEndPoint发送消息,也可以等待接受信息;

因为UPD不需要保证包的完整性,所以跟TCP不一样,不需要监听是否有客户端连接,直接发就是了;