套接字(socket)基本知识与工作原理
套接字(socket)基本知识与工作原理
一、Socket相关概念
Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。(其实就是两个程序通信用的。)
SOCKET用于在两个基于TCP/IP协议的应用程序之间相互通信。最早出现在UNIX系统中,是UNIX系统主要的信息传递方式。在WINDOWS系统中,SOCKET称为WINSOCK。两个基本概念:客户方和服务方。当两个应用之间需要采用SOCKET通信时,首先需要在两个应用之间(可能位于同一台机器,也可能位于不同的机器)建立SOCKET连接,发起呼叫连接请求的一方为客户方,接受呼叫连接请求的一方成为服务方。客户方和服务方是相对的,同一个应用可以是客户方,也可以是服务方。在客户方呼叫连接请求之前,它必须知道服务方在哪里。所以需要知道服务方所在机器的IP地址或机器名称,如果客户方和服务方事前有一个约定就好了,这个约定就是PORT(端口号)。也就是说,客户方可以通过服务方所在机器的IP地址或机器名称和端口号唯一的确定方式来呼叫服务方。在客户方呼叫之前,服务方必须处于侦听状态,侦听是否有客户要求建立连接。一旦接到连接请求,服务方可以根据情况建立或拒绝连接。连接方式有两种,同步方式(Blocking)和(noBlocking).客户方发送的消息可以是文本,也可以是二进制信息流。当客户方的消息到达服务方端口时,会自动触发一个事件(event),服务方只要接管该事件,就可以接受来自客户方的消息了。
二、Socket有两种类型:
- 流式Socket(STREAM):是一种面向连接的Socekt,针对面向连接的TCP服务应用,安全,但是效率低;
- 数据报式Socket(DATAGAM):是一种无连接的Socket,对应于无连接的UDP服务应用。不安(丢失,顺序混乱,在接受端要分析重排及要求重发),但效率高。
三、Socket一般应用模式(服务端和客户端)
服务端的Socket(至少需要两个):
- 一个负责接受客户端连接请求(但不负责与客户端通信)
- 每成功接收到一个客户端的连接便在服务端产生一个对应的Socket
- 再接受到客户端连接时创建。
- 为每个连接成功的客户端请求在服务端都创建一个对应的Socket(负责和客户端通信)。
客户端的Socket
- 客户端Socket
- 必须指定要连接的服务端地址和端口。
- 通过创建一个Socket对象来初始化一个到服务端的TCP连接。
Socket通信基本流程图
Socket的通信过程
服务端:
- 申请一个Socket
- 绑定到一个IP地址和一个端口
- 开启侦听,等待接受连接
客户端:
- 申请一个Socket
- 连接服务器(指明IP地址和端口号)
服务器端接到连接请求后,产生一个新的Socket(端口大于1024)与客户端建立连接并进行通讯,原侦听Socket继续侦听。
套接字(socket)基本知识与工作原理相关推荐
- 套接字socket 的地址族和类型、工作原理、创建过程
注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料如<linux内核完全剖析>.<linux c 编程一站式学习>等,只是为了更好 ...
- [python学习] 专题七.网络编程之套接字Socket、TCP和UDP通信实例
很早以前研究过C#和C++的网络通信,参考我的文章: C#网络编程之Tcp实现客户端和服务器聊天 C#网络编程之套接字编程基础知识 ...
- Java 套接字(Socket)
网络应用模式主要有: 主机/终端模式:集中计算,集中管理: 客户机/服务器(Client/Server,简称C/S)模式:分布计算,分布管理: 浏览器/服务器模式:利用Internet跨平台. www ...
- 了解套接字Socket
了解套接字Socket 套接字是通过操作系统(OS)完成网络通信的一种标准方法.可以将套接字看作是与连接相连的一个终端,就像是操作员配电盘上的一个插座一样.但是这些套接字只是程序员的抽象称呼 ...
- Linux下套接字详解(二)----套接字Socket
在前面我们讲了TCP/IP.TCP和UDP的一些基本知识,但是协议只有一套,而我们系统多个TCP连接或多个应用程序进程必须通过同一个 TCP协议端口传输数据.为了区别不同的应用程序进程和连接,许多计算 ...
- 5.1 计算机网络之传输层(传输层提供的服务及功能概述、端口、套接字--Socket、无连接UDP和面向连接TCP服务)
文章目录 1.传输层提供的服务及功能概述 2.传输层的寻址与端口 (1)端口的作用 (2)端口号的分类 (3)套接字 3.无连接UDP和面向连接TCP服务 1.传输层提供的服务及功能概述 传输层的功能 ...
- Java 套接字Socket
套接字 一.概述 本质上是一套基于网络传输数据的流 实际上是一套用于网络通信的API IP地址 IPv4是指由4组数组成的IP地址 , 每组数的范围在0~255 .一共有2的32次方个地址(43亿多) ...
- Java套接字Socket编程--TCP参数
在Java的Socket中,主要包含了以下可设置的TCP参数. 属性 说明 默认值 SO_TIMEOUT 对ServerSocket来说表示等待连接的最长空等待时间; 对Socket来说表示读数据最长 ...
- 网上最全的套接字socket
套接字socket使用 1.1创建socket sk = socket(int family, int type, int protocol); family:协议簇,PF_INET.PF_INET6 ...
最新文章
- 监控摄像头使用率不足六成 还需提高维护力
- arm9 6410 tslib触屏小程序
- 数据结构与算法笔记(十五)—— 散列(哈希表)
- 推荐 7 个 Github 上近 200k Star 的计算机学习资源,练好前端内功的秘籍!
- IDEA配置SVN并实现代码版本控制
- Java124 0,AcWing 124. 数的进制转换java
- 论文公式编号右对齐_论文不会写?最详细的论文排版技巧
- matplotlib3d柱状图_Matplotlib——画图(散点图、柱状图、等高线图、3D图)
- nginx 监听非标准端口80,重定向端口丢失问题解决
- 一个定时器的普通实现,多进程实现和多线程实现的对比
- 毕设项目 - 基于SSM的药品管理系统(含源码+论文)
- 使用Atmel Studio7和USBasp烧写器烧写AVR单片机
- Delphi6.0的那些
- 15款超好用的短链接在线生成器(新浪t.cn、腾讯url.cn)
- ‘MSOCache’是什么文件?
- css bottom属性 使元素位置相对固定
- 电视盒子显示ntp服务器异常,云计算-更换VRM主节点所在服务器主板后,出现VRM与NTP服务器状态异常的处理方法...
- WIN10下如何解决PL2303驱动不可用的问题或者com口显示黄色感叹号usb-to-serial
- windows配置好用的RSS
- 【四】狂神Java笔记-面向对象
热门文章
- STL源码剖析 set
- clion编译器解决undefined reference to symbol ‘shm_open@@GLIBC_2.2.5‘
- 离合器半联动点的判断和技巧 为您支招
- vector 、map 、iterator 之学习笔记
- Linux find命令、Linux rmdir命令、Linux ls命令
- oracle thin和oci 区别
- 前端布局神器display:flex
- python 笔记(三) 断言(assert)
- iOS - Core Animation 核心动画
- Javascript 构造函数模式、原型模式