Socket初识
基础概念
Socket,套接字,本质是网络编程接口、提供网络通信的能力,实现不同虚拟机或不同计算机之间的通信。面向客户/服务(C/S)模型,socket是应用层和传输层之间的中间软件抽象层:
- 顶上三层处理具体网络应用的所有细节、但对通信细节了解很少,底下四层对具体网络应用了解不多、但处理所有的通信细节(发送数据、等待确认、计算并校正校验等);
- 顶上三层通常构成所谓的用户进程,底下四层通常提供作为操作系统内核的一部分,用户进程操作的是应用层,内核操作的是传输层及传输层一下的协议;
在网络中进程通信无处不在,socket通信的前提是唯一表示网络中的一个进程:
- 本地进程唯一表示:ProcessID
- 网络进程唯一表示:IP地址+协议+端口号(三元组)
- IP地址(IP层):唯一表示主机;
- 协议和端口号(TCP层):唯一表示主机中的一个进程;
网络通信连接至少要一对socket,socket之间的通信过程可以分为三个步骤:
- 服务器监听;
- 客户端请求;
- 连接确认;
“一切皆Socket”(Socket起源于Unix,Unix/Linux基本哲学之一就是“一切皆文件”),Socket是"打开—读/写—关闭"模式的实现。
Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket、我们才能使用TCP/IP协议。
- TCP:传输层协议、基于网络层的IP协议,解决数据如何在网络中传输;
- HTTP:应用层协议、基于传输层的TCP协议,解决如何包装数据;
HTTP是轿车,提供封装或显示数据的具体形式;Socket是发动机,提供网络通信的能力。
在Socket编程中,经常会遇到同步、异步、阻塞和非阻塞,具体概念参见:谈I/O模型 - sqh;
参考
TCP编程
TCP编程流程图如下(三次握手 + 四次挥手)
服务端
(1)编程步骤
- 创建一个监听Socket,绑定到一个IP地址和一个端口;
- 新建一个监听线程,(通过一个无限循环)开始监听等待连接请求;
- 监听到并接受连接请求,再创建一个该连接上的新的接收Socket;
- 为该连接新建一个工作线程,接收Socket(通过一个无限循环)与客户端Socket进行通信;
- 返回,监听等待其他的客户端连接请求;
- 关闭Socket;
(2)池管理
- Buffer池:集中管控Socket缓冲区,防止内存碎片
- SAEA池:集中管控Socket,重复利用Socket
- Thread池:集中管控和调度工作线程
- SQL池:分离网络服务层与数据访问层(SQL的执行效率远:低于网络层执行效率)
(3)同步Socket使用场景:同步Socket+Thread
- 客户端数量比较少(<50);
- 客户端数量较多但都是短连接:客户端的连接在处理完一次收发之后就断开;
客户端
(1)编程步骤
- 创建Socket;
- 向服务器发出连接请求;
- 和服务器端进行通信;
- 关闭Socket;
UDP编程
服务端
- 创建socket;
- 将socket绑定到一个本地地址和端口上;
- 等待接收数据;
- 关闭socket;
客户端
- 创建socket;
- 向服务器发送数据;
- 关闭socket;
HTTP编程
Socket编程应用
- C# - 网络编程 之 Socket; C# - 网络编程 之 TcpClient与TcpListener;
- Java - 网络编程 之 ;
Socket初识的更多相关文章
- python ---socket初识
python网络编程(初识) 一些概念 套接字: 套接字(socket)也叫通信端点,最初用于计算机内部进程之间的通信,而随着网络的发展,套接字被用于计算机之间的通信.举个例子,你(是一台计算机)要打 ...
- Python自动化之socket初识
1. os.popen() os.system(cmd)会直接输出命令的结果到屏幕上,返回一个状态码0或1. os.popen(cmd)会返回一个<open file 'dir', mode ' ...
- python学习之路网络编程篇(第一篇)socket初识
什么是socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为socket.socket通常也称为“套接字”,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的 ...
- Socket 初识 用Socket建立一个简易Web服务器
摘自<Asp.Net 本质论>作者:郝冠军 //在.Net中.system.Net命名空间提供了网络编程的大多数数据据类型以及常用操作,其中常用的类型如下: /* IPAddress 类表 ...
- Socket初识2
一.Socket一些概念 sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0) 1.1 参数1:Socket Families(地址簇) / ...
- TCP/IP,HTTP,Socket初识
在大学时候学过网络通信这一块,奈何已经还给老师,苍天饶过谁,该拾起来看看学学的还是要学,先简单了解了下这方面的知识,后续会继续通过看书来充实这方面的知识. 手机能够联网是手机底层实现了TCP/IP协议 ...
- python学习之路---day25( 网络编程基础和初识socket)
基本网络知识和初识socket一:基本知识 网线:传输电信号 集线器:将所有连接到集线器的网络设备连通起来 交换机: 升级版的集线器 网卡:接受电信号 MAC地址:物理地址: 8C-88-4B-88- ...
- socket编程相关阐述
一.socket初识 ①服务端 import socket server = socket.socket() server.bind(('127.0.0.1', 8080)) server.liste ...
- 老男孩Python全栈第2期+课件笔记【高清完整92天整套视频教程】
点击了解更多Python课程>>> 老男孩Python全栈第2期+课件笔记[高清完整92天整套视频教程] 课程目录 ├─day01-python 全栈开发-基础篇 │ 01 pyth ...
随机推荐
- 关于Android避免按钮重复点击事件
最近测试人员测试我们的APP的时候,喜欢快速点击某个按钮,出现一个页面出现多次,测试人员能不能禁止这样.我自己点击了几下,确实存在这个问题,也感觉用户体验不太好.于是乎后来我搜了下加一个方法放在我们U ...
- JavaScript中事件处理
先看看下面一道题目,请评价以下代码并给出改进意见: if (window.addEventListener) {//标准浏览器 var addListener = function(el, type, ...
- 开发者最爱的Firebug停止更新和维护
近日,Firebug团队在其官网上宣布,Firebug将不再继续开发和维护,并邀请大家使用Firefox的内置开发工具. Firebug最初是2006年1月由Joe Hewitt编写, ...
- WebLogic的安装和配置以及MyEclipse中配置WebLogic
WebLogic 中间件: 是基础软件的一大类,属于可复用软件的范畴,顾名思义,中间件属于操作系统软件与应用软件的中间,比如:JDK,框架,weblogic. weblogic与tomcat区别 : ...
- BPM端到端流程解决方案分享
一.需求分析 1.企业规模的不断发展.管理水平的不断提升,通常伴随着企业各业务板块管理分工更细.更专业,IT系统同样越来越多.越来越专 业化.不可避免的,部门墙和信息孤岛出现了,企业的流程被部门或者I ...
- 敏捷转型历程 - Sprint3 一团糟的演示会
我: Tech Leader 团队:团队成员分布在两个城市,我所在的城市包括我有4个成员,另外一个城市包括SM有7个成员.另外由于我们的BA离职了,我暂代IT 的PO 职位.PM和我在一个城市,但他不 ...
- Java模拟Windows的Event
场景 开发中遇到一个场景,业务操作会不定时的产生工作任务,这些工作任务需要放入到一个队列中,而另外会有一个线程一直检测这个队列,队列中有任务就从队列中取出并进行运算. 问题 业务场景倒是简单,只不过这 ...
- JS中给正则表达式加变量
前不久同事询问我js里面怎么给正则中添加变量的问题,遂写篇博客记录下. 一.字面量 其实当我们定义一个字符串,一个数组,一个对象等等的时候,我们习惯用字面量来定义,例如: var s = &quo ...
- ExtJS in Review - xtype vs. alias
今天在帮一个兄弟检查一段自定义控件的代码时觉得他对xtype以及alias的使用和ExtJS各示例代码的使用有较多的不一致,而我自己也不是很清楚使用这两个属性时的最佳方法.因此在回家后整理出了这样一篇 ...
- WinRT自定义控件第一 - 转盘按钮控件
之前的文章中,介绍了用WPF做一个转盘按钮控件,后来需要把这个控件移植到WinRT时,遇到了很大的问题,主要原因在于WPF和WinRT还是有很大不同的.这篇文章介绍了这个移植过程,由于2次实现的控件功 ...