python入门开发学习笔记之什么是socket

Linux之本地Socket通信 一、Sokcet 学习路径1:http://blog.youkuaiyun.com/u010073981/article/details/50734484 学习路径2:https://www.cnblogs.com/cy568searchx/p/4211124.html 学习路径3:https://www.cnblogs.com/yusenwu/p/4579167.html 为了防止资源丢失,整合如下... 阅读详情

本节重点:

  • 让学生了解什么是socket
  • 让学生掌握socket常用接口方法

本节时长需控制在35-40分钟内

引子(2分钟)

我们已经知道,假设我现在要写一个程序,给另一台计算机发数据,必须通过tcp/ip协议 ,但具体的实现过程是什么呢?我应该怎么操作才能把数据封装成tcp/ip的包,又执行什么指令才能把数据发到对端机器上呢? 不能只有世界观,没有方法论呀。。。此时,socket隆重登场,简而言之,socket这个东东干的事情,就是帮你把tcp/ip协议层的各种数据封装啦、数据发送、接收等通过代码已经给你封装好了,你只需要调用几行代码,就可以给别的机器发消息了。

Socket介绍

什么是socket?(5分钟)

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部。

socket起源于Unix,而Unix/Linux 基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式 来操作。Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)

你想给另一台计算机发消息,你知道他的IP地址,他的机器上同时运行着qq、迅雷、word、浏览器等程序,你想给他的qq发消息,那想一下,你现在只能通过ip找到他的机器,但如果让这台机器知道把消息发给qq程序呢?答案就是通过port,一个机器上可以有0-65535个端口,你的程序想从网络上收发数据,就必须绑定一个端口,这样,远程发到这个端口上的数据,就全会转给这个程序啦

Socket通信套路(10分钟)

当通过socket建立起2台机器的连接后,本质上socket只干2件事,一是收数据,一是发数据,没数据时就等着。

socket 建立连接的过程跟我们现实中打电话比较像,打电话必须是打电话方和接电话方共同完成的事情,我们分别看看他们是怎么建立起通话的

接电话方:

1.首先你得有个电话

2.你的电话要有号码

3.你的电话必须连上电话线

4.开始在家等电话

5.电话铃响了,接起电话,听到对方的声音

打电话方:

1.首先你得有个电话

2.输入你想拨打的电话

3.等待对方接听

4.say “hi 约么,我有七天酒店的打折卡噢~”

5.等待回应——》响应回应——》等待回应。。。。

把它翻译成socket通信

接电话方(socket服务器端):

1.首先你得有个电话\(生成socket对象\)

2.你的电话要有号码\(绑定本机ip+port\)

3.你的电话必须连上电话线\(连网\)

4.开始在家等电话\(开始监听电话listen\)

5.电话铃响了,接起电话,听到对方的声音\(接受新连接\)

打电话方(socket客户端):

1.首先你得有个电话\(生成socket对象\)

2.输入你想拨打的电话\(connect 远程主机ip+port\)

3.等待对方接听

4.say “hi 约么,我有七天酒店的打折卡噢~”\(send\(\) 发消息。。。\)

5.等待回应——》响应回应——》等待回应。。。。

[图片上传失败…(image-7c36f6-1650597257642)]

Socket套接字方法

socket 实例类(8-10分钟)
socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)

family(socket家族)

  • socket.AF_UNIX:用于本机进程间通讯,为了保证程序安全,两个独立的程序(进程)间是不能互相访问彼此的内存的,但为了实现进程间的通讯,可以通过创建一个本地的socket来完成
  • socket.AF_INET:(还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET)

socket type类型

  • socket.SOCK_STREAM #for tcp
  • socket.SOCK_DGRAM #for udp
  • socket.SOCK_RAW #原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。
  • socket.SOCK_RDM #是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。
  • socket.SOCK_SEQPACKET #废弃了

(Only SOCK_STREAM and SOCK_DGRAM appear to be generally useful.)

proto=0 请忽略,特殊用途

fileno=None 请忽略,特殊用途

服务端套接字函数(2分钟)
  • s.bind() 绑定(主机,端口号)到套接字
  • s.listen() 开始TCP监听
  • s.accept() 被动接受TCP客户的连接,(阻塞式)等待连接的到来
客户端套接字函数(2分钟)
  • s.connect() 主动初始化TCP服务器连接
  • s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常
公共用途的套接字函数(3-5分钟)
  • s.recv() 接收数据
  • s.send() 发送数据(send在待发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完,可后面通过实例解释)
  • s.sendall() 发送完整的TCP数据(本质就是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间时,数据不丢失,循环调用send直到发完)
  • s.recvfrom() Receive data from the socket. The return value is a pair (bytes, address)
  • s.getpeername() 连接到当前套接字的远端的地址
  • s.close() 关闭套接字
  • socket.setblocking(flag) #True or False,设置socket为非阻塞模式,以后讲io异步时会用
  • socket.getaddrinfo(host, port, family=0, type=0, proto=0, flags=0) 返回远程主机的地址信息,例子 socket.getaddrinfo(‘luffycity.com’,80)
  • socket.getfqdn() 拿到本机的主机名
  • socket.gethostbyname() 通过域名解析ip地址
IPC之九:使用UNIX Domain Socket进行进程间通信的实例 socket编程是一种用于网络通信的编程方式,在socket的协议族中除了常用的AF_INET、AF_RAW、AF_NETLINK等以外,还有一个专门用于IPC的协议族AF_UNIX,IPC是Linux编程中一个重要的概念,常用的IPC方式有管道、消息队列、共享内存等,本文主要介绍用于本地进程间通信的UNIX Domain Socket,本文给出了多个具体的实例,每个实例均附有完整的源代码;本文所有实例在Ubuntu 20.04上本文的实例中涉及多进程编程等,本文对Linux编程的初学者有一些难度。 阅读详情

相关推荐

资金穿透分析

我们把准备好的银行数据导入到软件中,导入具体步骤这里不做详解,大家可以通过“清林情报分析师”公众号,查看操作视频第二节

清林情报分析师 3491

01.socket初步

1、什么是Socket 在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据 socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。 2.socket一些参数 SOCK_STREAM:表示面向连接的数据传输方式。 SOCK_DGRAM:表示

xiaoduan6的博客 1105

C# 调用halcon中visualize_object_model_3d显示点云

3.1 判断线程是否为空,如果为空,则新创建,如果不为空,则中断线程,清空窗口后再次执行创建操作3.2 创建:调用show()方法实例化显示类的对象,传入显示参数,将线程testvisual 绑定 在 类对象的action方法上(此处action方法内部,只调用了visualize_object_model_3d算子)3.3 启动线程。

weixin_42362219的博客 1403

进程间通信(7)——套接字

进程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如:它们都仅限于本地进程间通信。而网络间通信要解决的是不同主机进程间的通信问题(可把同机进程间通信看成一个特例)。同一主机上,不同进程可用进程号(process ID)唯一标识。但在网络环境下,各主机独立分配的进程号不能唯一标识该进程。例如,主机A赋于某进程号5,在B机中也可以存在5号进程,因此,“5号进程”这句话就没有意义了。

私房菜 2839

Qoder + ADB Supabase :5分钟GET超火AI手办生图APP

本文介绍如何利用Qoder、阿里云 ADB Supabase 和通义千问图像编辑模型,快速构建AI手办生图Flutter应用。无需传统后端,通过AI生成代码、BaaS服务与边缘函数调用,实现从原型到上线的敏捷开发,全流程轻量高效,助力Vibe Coding落地实践。

数据库技术 931

Hyper-V虚拟机 安装 银河麒麟V10桌面版

如何在windows 11 Hyper-V 虚拟机中 安装 银河麒麟V10桌面版。

m0_46756112的博客 3418

SOCK_STREAM,SOCK_DGRAM,SOCK_SEQPACKET,SOCK_RAW.

bluetooth socket tcp/ip l2cap

liuxd3000的专栏 1万+

电路板功能测试系统-FCT for PCBA

电路板功能测试系统用于电路板组件(PCBA)的功能测试(FCT),满足自动化大批量生产的要求。  ● 用户根据自己需要定义测试步骤,灵活方便  ● 适合工业自动化大批量生产应用  ● 系统测试精度高,稳定可靠   一、电路板功能测试系统概述 电路板测试过程通常由多个步骤组成,每单个步骤中需要对多个物理量(电压、电流、电阻、频率、波形等)进行测试。在每个步骤测试时

6813

python入门开发学习笔记之socket tcp / udp 通信实例

本节重点: 使学生掌握基本的socket tcp / udp 通信实例 让学生可通过socket写一个简单的聊天的例子 本节时长需控制在70-80分钟内 基本Socket例子(10-15分钟) 做了这么久的铺垫,是时候该与远方的她say hi啦 Server # Echo server program import socket HOST = '' # Symbolic name meaning all available interfaces PORT = 500

Python_0011的博客 301

VisionMaster 4.2.0安装

按照顺序安装。

XuXing_java的专栏 3790

Ubuntu20.04运行Vins-fusion

因已安装ROS noetic,eigen,opencv及ceres等库,这部分环境配置就不细讲,直接下载VINS-FUSION的代码库 下载编译 cd ~/vins-fusion/src git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git cd ../ catkin_make source ~/catkin_ws/devel/setup.bash 编译时会发现一堆错误,别急,无非就是环境冲突问题,一个个解决 1)首先,ROS

xiaojinger_123的博客 1万+

Python 中的 Socket 编程入门

Socket 是一个网络编程的接口,提供了网络通信的基础。它使得应用程序能够通过网络互相发送和接收数据。简单来说,Socket 就是一个网络连接的端点,它可以被视作网络通信的“门”,通过它进行数据的发送和接收。Socket 编程是实现网络通信的基础,Python 提供了简单易用的socket模块,方便开发者进行 TCP 和 UDP 通信。通过本文的介绍,你应该对 Python 中的 Socket 编程有了初步的了解。

chusheng1840的博客 2810

IEC61850规约客户端软件开发实战(第二章)

本文介绍了基于IEC61850规约的客户端软件开发过程,重点阐述功能界面设计和服务端连接功能的实现。界面采用Qt框架设计,包含功能按钮区、数据模型展示区(使用QTreeWidget)和状态显示区。连接功能通过libiec61850开源库实现,详细说明了连接流程、句柄创建及状态管理的代码实现。测试结果表明系统能正确识别连接状态,并通过界面直观显示。文章为IEC61850规约软件开发提供了实用参考,下期将分享规约模型数据加载的实现过程。

半青年的博客 2858

python socket recvfrom_Python socket学习笔记(一)

最近在看 Python的视频,针对socket 编程做一个笔记一、socket是什么?socket 通常也称为“套接字”,用于描述 IP 地址和端口,是一个通讯链的句柄。应用程序通常通过 “套接字”向网络发出请求或者应答网络请求。说白了,就是一种通讯机制。它类似于公司的电话客服部门,你打电话的时候,那边会分配一个人回答你的问题,客服部门就相当于 socket 的服务器端了,打电话的人相当于客户端了...

weixin_39999586的博客 3781

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Python的socket学习笔记1

Python Socket编程入门指南 本文介绍了Python中使用Socket进行网络通信的基础方法。Socket是网络通信的核心机制,通过IP地址和端口号实现设备间数据交换。文章详细拆解了服务端开发流程:创建Socket套接字(IPv4+TCP协议)→绑定端口→监听连接→收发数据→关闭连接,并提供了完整的服务端/客户端代码示例(含端口绑定、数据收发等核心操作)。特别指出常见错误如"Address already in use"(端口冲突)和"Connection refus

m0_66447204的博客 411

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Python 之 socket 入门

python 编写server的步骤:    1.       第一步是创建socket对象。调用socket构造函数。如:       socket = socket.socket( family, type )       family参数代表地址家族,可为AF_INET或AF_UNIX。AF_INET家族包括Internet地址,AF_UNIX家族用于同一台机器上的进程间通信。

WangSai.coo的专栏 824

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Python 中 Socket 模块详解

Python 的socket模块提供了强大的网络编程能力。通过了解基础的 Socket 操作、数据发送接收、Socket 选项以及异常处理,开发者可以轻松地实现网络应用。希望这篇博文能帮助你更好地理解和使用 Python 的 Socket 模块。

XMYX-0 2082

【python】socket 入门以及多线程tcp链接

Socket是套接字的意思,是网络编程的核心对象,通信两端都独有自己的Socket对象, 数据在两个Socket之间通过 字节流(TCP协议) 或者 数据报包(UDP协议)的形式进行传输.

weixin_57336987的博客 1866

Python Socket通讯编程入门

Socket: 又名套接字,是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象。它们允许程序接受并进行连接,如发送和接受数据。为了建立通信通道,网络通信的每个端点拥有一个套接字对象极为重要。 三种最流行的套接字类型是:stream,datagram和raw。 stream和datagram套接字可以直接与TCP协议进行接口

新手村 986

python socket编程_Python Socket编程快速入门

Python Socket编程快速入门2019-02-22T10:02:10176100#### 本文中,我们将以Python为例介绍Socket网络编程。## Socket网络编程介绍socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件...

weixin_39781186的博客 146

python web开发入门_python大佬整理的python web开发从入门到精通学习笔记

原标题:python大佬整理的python web开发从入门到精通学习笔记Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象、直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法非常简捷和清晰,与其它大多数程序设计语言不一样,它使用缩进来定义语句。Pyth...

weixin_39607450的博客 512

Python Socket编程详解

@author StormMa @date 2017-06-10 生命不息,奋斗不止! 今天,来总结一下Python中Socket编程的部分,首先申明一下Python的版本是3.5 开始之前 我想学习Socket之前,你应该去看看什么是Socket,Socket通信是怎么一个流程,我想只有了解这些之后,你才能更好地掌握Socket编程,这里我就引用一个图,来大致的说明一下Socket通

StormMaybin的博客 4198

python学习笔记6-socket

s = new ServerSocket(80);}catch(Exception e){System.out.println(“Error:”+e);return;}System.out.println(“waiting for connection”);for(;😉{try{//等待连接Socket remote = s.accept();System.out.println(“connection ,sending data”);BufferedReader in = new BufferedRea

2401_84010901的博客 928

网络编程入门:基于 Python 的 Socket 通信

创建 UDP 套接字对象# 定义默认的编码方式为 UTF-8# 绑定 IP 地址和端口号# 将消息编码为字节类型并发送到指定地址# 接收消息,最多接收 buffer_size 字节# 将接收到的字节数据解码为字符串# 关闭 UDP 套接字# 创建自定义的 UDP 套接字对象,自动使用 UTF - 8 编码# 绑定本地回环地址和端口 8080# 接收客户端消息,自动解码# 打印消息和客户端地址# 关闭套接字sk.close()# 创建自定义的 UDP 套接字对象。

q_cccc_的博客 1389

python socket 书籍_python SOCKET编程基础入门

一、UDP编程1.客户端Client:发起访问的一方。2.服务器端3.server段编程(1)建立socket,socket是负责具体通信的一个实例(2)绑定,为创建的socket指派固定的端口和IP地址(3)接受对方发送内容(4)给对方发送反馈,此步骤为非必须步骤4.Client端编程(1)建立通信的socket(2)发送内容到指定服务器(3)接受服务器给定的反馈内容5.模拟一下这个过程(1)我...

weixin_36307834的博客 268

Python Socket入门学习

本文介绍了使用Python标准库socket进行网络编程的基础知识。主要内容包括:Socket的基本概念,TCP/UDP协议的区别,以及如何使用Python实现TCP和UDP通信的完整示例代码。文章提供了服务端和客户端的代码实现,并详细说明了运行测试步骤和常见问题解决方法。最后还指出了进一步学习的方向,如多线程处理、IO多路复用等。通过阅读本文,读者可以快速掌握Socket编程的基本技能,为深入理解网络通信打下基础。

2201_75821470的博客 224
上一篇: python入门开发学习笔记之TCP/IP五层模型讲解
下一篇: python入门开发学习笔记之socket tcp / udp 通信实例
程序员_大白
博客等级 码龄5年 1万+粉丝 4001原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值