一、Socket简介

Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换。

几个定义:

(1)IP地址:即依照TCP/IP协议分配给本地主机的网络地址,两个进程要通讯,任一进程首先要知道通讯对方的位置,即对方的IP。

(2)端口号:用来辨别本地通讯进程,一个本地的进程在通讯时均会占用一个端口号,不同的进程端口号不同,因此在通讯前必须要分配一个没有被访问的端口号。

(3)连接:指两个进程间的通讯链路。

(4)半相关:网络中用一个三元组可以在全局唯一标志一个进程:

(协议,本地地址,本地端口号)

这样一个三元组,叫做一个半相关,它指定连接的每半部分。

(4)全相关:一个完整的网间进程通信需要由两个进程组成,并且只能使用同一种高层协议。也就是说,不可能通信的一端用TCP协议,而另一端用UDP协议。因此一个完整的网间通信需要一个五元组来标识:

(协议,本地地址,本地端口号,远地地址,远地端口号)

这样一个五元组,叫做一个相关(association),即两个协议相同的半相关才能组合成一个合适的相关,或完全指定组成一连接。

二、客户/服务器模式

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

(1)首先,建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。

(2)其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步,这就是基于客户/服务器模式的TCP/IP。

服务器端:

其过程是首先服务器方要先启动,并根据请求提供相应服务:

(1)打开一通信通道并告知本地主机,它愿意在某一公认地址上的某端口(如FTP的端口可能为21)接收客户请求;

(2)等待客户请求到达该端口;

(3)接收到客户端的服务请求时,处理该请求并发送应答信号。接收到并发服务请求,要激活一新进程来处理这个客户请求(如UNIX系统中用fork、exec)。新进程处理此客户请求,并不需要对其它请求作出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。

(4)返回第(2)步,等待另一客户请求。

(5)关闭服务器

客户端:

(1)打开一通信通道,并连接到服务器所在主机的特定端口;

(2)向服务器发服务请求报文,等待并接收应答;继续提出请求......

(3)请求结束后关闭通信通道并终止。

从上面所描述过程可知:

(1)客户与服务器进程的作用是非对称的,因此代码不同。

(2)服务器进程一般是先启动的。只要系统运行,该服务进程一直存在,直到正常或强迫终止

最新文章

  1. Linux虚拟机中 Node.js 开发环境搭建
  2. 用C#编程的建议
  3. NGUI无限滑动
  4. Mac 加密软件
  5. 【USACO 3.3.2】商品购物
  6. POJ 1637 混合图求欧拉回路 最大流实现
  7. Android 使用monkey自动测试
  8. EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配
  9. 【解惑】剖析float型的内存存储和精度丢失问题
  10. Python学习笔记——基础篇【第五周】——正在表达式(re.match与re.search的区别)
  11. 关于C++中的前置声明(附程序运行图)
  12. 剑指offer-面试题7:俩个栈实现队列(c)
  13. HBuilder git合作-从Git Hub Clone项目
  14. 初学Python的一些细节
  15. Manacher学习笔记
  16. 深度讲解 .net session 过期机制
  17. python-Beautiful rose
  18. c# list批量添加 对象 到数据库的sql
  19. nowcoder 203J Graph Coloring I(dfs)
  20. JDK下载安装以及环境变量的配置

热门文章

  1. Java DES加密解密
  2. poj 2185 Milking Grid(next数组求最小循环节)
  3. android.annotation.SuppressLint
  4. windows下关闭指定端口服务,解决tomcat端口占用问题
  5. Intel® Media SDK Media Samples Linux 学习笔记(转)
  6. 最浅谈的SG函数
  7. Codeforces Round #419 (Div. 1) 补题 CF 815 A-E
  8. 【转】设置cocos2dx 屏幕分辨率
  9. 小程序不支持wx.request同步请求解决方法
  10. nodejs 打造 多人对战游戏服务器(初级入门)