一、基本概念

a) 同步:指发送方发出数据后,等收到接收方发回的响应,才发下一个数据包的通信方式。

nb)异步:指的是发送方不等接收方响应,便接着发下个数据包的通信方式。

c) 阻塞:指调用某函数时,直到该函数完成操作,才返回;否则一直阻塞在该调用上。

d) 非阻塞:指调用某操作时,不管操作是否成功都立即返回,而不会挂在该操作上。

二、soeket简介

  Client/Server (客户机/服务器)模型为最常用的模型。在这种方案中客户应用程序向服务器程序请求服务,一个服务器程序通常用一个众所周知的地址监听对服务的请求,也就是说服务器进程一直处于休眠状态,直到一个客户向这个服务器的地址提出了连接请求。在这个时刻,服务程序被"惊醒"并且为客户提供服务,即对客户的请求作出适当的反应。

  Socket 实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有 Socket 接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个 Socket 接口来实现。

  Windows Sockets 规范,它不是一种网络协议,而是一套开放的、支持多种协议的 Windows 下的网络编程接口。现在的 Winsock 已经基本上实现了与协议无关,可以使用 Winsock 来调用多种协议的功能,但较常使用的是 TCP/IP 协议。

三 C/S下的socket通信

  C/S模式即我们平时经常提到的 客户端–服务器 模式。

  3.1网络软件的通用体系结构

  客户(Client)和服务器(Server)是指通信中所涉及的两个应用进程。客户端—服务器方式所描述的是进程之间服务和被服务的关系。在下图中,主机A运行客户程序而主机B运行服务器程序。

3.2 最简单的Socket通信流程

  一个只有客户方向服务方发信息的单向通信,并且也只有客户方会主动提出断开连接的最简单的情形(相反过程的原理是一样的),其双方Socket之间的关系如下图所示。

  由上面这个十分简单的过程很容易得出最简单的Socket通信流程,如下图所示。

客户机/服务器模式的建立基于以下两点:

  a)非对等作用

  b)通信完全是异步的。

客户机/服务器模式在操作过程中采取的是主动请示方式:首先服务器方要先启动,并根据请示提供相应服务。

四、网络字节顺序

  不同的计算机存放多字节值的顺序不同,有的机器在起始地址存放低位字节(低位先存),有的机器在起始地址存放高位字节(高位先存)。基于Intel的CPU,即我们常用的PC机采用的是低位先存。为保证数据的正确性,在网络协议中需要指定网络字节顺序,TCP/IP协议使用16位整数和32位整数的高位先存格式。由于不同的计算机存放数据字节的顺序不同,这样发送方发送数据后,即使接收方接受到该数据,也有可能无法查看所接收到的数据。所以在网络中不同主机间进行通信,要统一采用网络字节顺序。

最新文章

  1. [OpenCV] Samples 12: laplace
  2. android中ProgressBar和ListView
  3. nginx配置相关
  4. (原创)鸟哥linux学习script shell相关笔记
  5. Spring+MyBatis实践—登录和权限控制
  6. 【MFC学习笔记-作业6-sin图像】【OnDraw(CDC* pDC)】
  7. Linux学习之查找命令find
  8. 快速解决PDF文档加密不能打印问题_百度经验
  9. shell程序设计(转)
  10. RHEL 6.0 FTP服务器配置菜鸟配置过程记录
  11. PHP Misc. 函数
  12. 使用HttpWebRequest请求https链接时,无法访问的问题,设置ServicePointManager.SecurityProtocol安全协议
  13. myBase Desktop 6.5.1 无限期试用
  14. 动态库的链接和链接选项-L,-rpath-link,-rpath
  15. C语言中指针变量的加减运算
  16. sys.argv[]使用
  17. 一个基于C++11的定时器队列(timerfd,poll实现)
  18. Django框架之序列化和上传文件
  19. C++中对象模型
  20. Nlog写日志到数据库

热门文章

  1. 关于softmax稳定性问题
  2. 【hackerrank】Weather Observation Station 18
  3. Centos7 离线安装 php7
  4. Mybatis foreach批量插入
  5. 华为云服务器centos7.3 安装jdk
  6. 洛谷 P4571 BZOJ 2257 [JSOI2009]瓶子和燃料
  7. jsoncpp 能做什么
  8. npm install 成功安装依赖后,运行跑不起来怎么办?
  9. 大数据笔记(十六)——Hive的客户端及自定义函数
  10. layer系列之弹层layer.prompt