套接字(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继续侦听。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 多线程--重点知识

1.全局变量global的用法 2.多线程共享全局变量-args参数 注意args参数类型为元组,逗号不能少!

当导用模块与包的import与from的问题(模块与包的调用)

当在views.py里写impor models会不会报错呢? 1、Python里面的py文件都是每一行的代码。2、Python解释器去找一个模块的时候,只去sys.path的路径里找3、django项目启动(django项目的启动文件是manage.py)启动项目是将manage.py的路…

Python多线程--互斥锁、死锁

1、互斥锁 为解决资源抢夺问题,使用mutex Threading.Lock()创建锁,使用mutex.acquire()锁定,使用mutex.release()释放锁。 代码一: import threading import time# 定义一个全局变量 g_num 0def test1(num):global g_num# 上锁…

freemind 要下载java_Freemind

动手编辑先按Ctrln,新建一个文件。这时出现了一个根节点。用光标单击它,改成“我学FreeMind”,然后在节点之外任一地方点击鼠标(或按Enter)完成编辑。然后,按Insert键,输入“下载安装”,按Enter键&#xff…

pyecharts对于经纬度_一文带你掌握Pyecharts地理数据可视化的方法

本文主要介绍了Pyecharts地理数据可视化,分享给大家,具体如下:一、Pyecharts简介和安装1. 简介Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Pyth…

使用Sqlmap对dvwa进行sql注入测试(初级阶段)

0.测试准备 1)打开Kali虚拟机终端; 2)打开靶机OWASP,并通过浏览器,输入IP地址进入dvwa的主页,然后选择SQL injection进入SQL注入的测试页面 1.获取DVWA的url和cookie 在输入框中输入1,显示有内容&…

如果备份还原SecureCRT、Xshell远程工具远程

因为有时候电脑操作系统要重新安装,需要将远程备份下来。或者要将远程发给其他同事。一、如何备份还原SecureCRT远程1、打开options-global options---general---configuration paths找到配置文件保存路径,如下图:2、打开C:\Users\NUC\AppDat…

Centos7 下yum安装mysql

转载于:https://www.cnblogs.com/nbjjy/p/9023991.html

Python协程--实现斐波那契数列(Fibonacci)的几种方式

1.使用for遍历list数组 # 使用for遍历list数组 nums list() a 0 b 1 i 0while i < 10:nums.append(a)a, b b, abi 1for num in nums:print(num)2.使用迭代器完成 class Fibonacci(object):def __init__(self, all_num):self.all_num all_numself.current_num 0sel…

FTP服务的简介和配置详解

FTP服务的简介和配置详解注意&#xff1a;配置FTP服务时&#xff0c;最好关闭防火墙和selinux1、FTP服务简介FTP 是File Transfer Protocol&#xff08;文件传输协议&#xff09;的英文简称&#xff0c;而中文简称为“文件传输协议”。用于Internet上的控制文件的双向传输。同时…

Python协程--生成器(实现多任务)

0.生成器 1.使用yield完成多任务 import timedef task_1():while True:print("---1----")time.sleep(0.1)yielddef task_2():while True:print("---2----")time.sleep(0.1)yielddef main():t1 task_1()t2 task_2()# 先让t1运行一会&#xff0c;当t1中遇…

技术分享连载(六十一)

资源管理 Q1&#xff1a;Unity5.4.1中&#xff0c;我将需要的Shader打到一个AssetBundle包中&#xff08;包含一个关联了所有Shader的Shader Variants&#xff09;&#xff0c;分别用Shader.WarmupAllShaders和ShaderVariantCollection.WarmUp两种方式进行预加载&#xff0c;后…

SNF软件开发机器人-子系统-导出-导入功能-多人合作时这个功能经常用到

导出 导出可以将资源表和子系统导出并形成一个json文件。 1.效果展示&#xff1a; 2.使用说明&#xff1a; 点击导出按钮后会弹出一个导出页面。页面的左侧可以选择功能&#xff0c;右侧可以选择资源表&#xff0c;选择功能的同时右侧中功能所需的资源表也会被选择。当功能之间…

基于物理的渲染-用真实的环境光照亮物体

目前&#xff0c;在游戏引擎中用于照亮物体的光源非常丰富。其中&#xff0c;比较常用的有&#xff1a;平行方向光、点光源、聚光灯以及体积光等&#xff0c;但它们都是对真实光源的近似&#xff0c;并不能很好地模拟真实世界中的复杂光照情况。为了增加光照效果的真实感&#…

克隆CentOS6虚拟机eth0被修改为eth1如何修改eth0

2019独角兽企业重金招聘Python工程师标准>>> 直接修改 /etc/sysconfig/network-script/ifcfg-eth0 删掉UUID HWADDR 配置静态地址 然后&#xff1a; rm -rf  /etc/udev/rules.d/70-persistent-net.rules然后reboot 转载于:https://my.oschina.net/hengbao666/blog/…

如何高效的编写与同步博客 (.NET Core 小工具实现)

系列目录 [如何高效的编写与同步博客&#xff08;一&#xff09;- 编写 ]如何高效的编写与同步博客&#xff08;二&#xff09;- 快速发布到多个渠道一.前言 写博客&#xff0c;可以带给我们很多好处&#xff0c;比如可以让我们结识更多志同道合的人&#xff1b;在写博客过程中…

mxf高速发展和数字电影母版制作技术

1.实现MXF的诺言——格式只是迈向可互操作内容管理的一步 当把元数据加到数字内容的MXF&#xff08;素材交换格式&#xff09;标准通过EBU于2002年推出时&#xff0c;当时曾预期广播机构将会迅速无缝地管理其所有来自不同厂家的制作、后期和分配系统上的数字内容。 六年过…