socket是什么?用它做什么?

socket,我们通俗的称之为套接字, 是进程间通信的一种方式,但是他与其他进程通信的一个主要区别是 他能实现不同主机间的通信,比如我们现在用的浏览器,在比如我们使用的微信,米聊,还有大家最熟悉 最喜欢用的陌陌,探探,约吧?此处省略n个交友软件.你懂得.

创建socket

# 首先需要导入
import socket
# 创建套接字
s = socket.socket(prarm1, param2)
# param1 : 可以选择AF_INET(用于internet进程间通信)或者AF_UNIX(用于同一台机器进行通信), 一般我们都用AF_INET.
# param2 : 套接字类型,可以是SOCK_STREAM(流式套接字,主要用于TCP协议),或者SOCK_DGRAM(数据报套接字,用于UDP协议)

小说明

其实套接字使用流程和文件使用流程非常像, 创建套接字(打开文件),使用套接字收/发数据(操作文件),关闭套接字(关闭文件). 建议大家刚开始创建完套接字立马写关闭,然后在折回来写业务代码,以免出现遗漏关闭

套接字应用

套接字的应用其实很简单,写个简单的小demo,帮助大家理解

# 导入socket模块
import socket
# 创建一个socket , 第一个参数为类型, 第二个参数为套接字类型 ,
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # udp套接字 创建完套接字要立马进行关闭,然后在中间写功能,养成习惯
# 目标ip地址和端口
dest_attr = ('192.168.23.22', 8080)
# 要发送的数据
send_data = input("请输入要发送的数据:")
# 发送数据到指定的ip上
s.sendto(send_data.encode('utf-8'), dest_attr)
# 等待接收对方返回数据
recv_data = s.recvfrom(1024) # 表示最大接收的字节数,此时recv_data 是一个元祖,第一个元素是对方发送的数据,第二个元素是对方的ip和端口
print(recv_data[0].decode())
print(recv_data[1])
# 关闭套接字
s.close()

小工具调试

推荐大家使用一个小工具: 网络调试助手.

在本机ip设置好本机ip地址和端口 然后在目标ip设置好用于服务的ip和端口 这样就可以实现简单的通讯了. (我们一般会对服务机做端口绑定,实现固定端口)

试想如果我们不对端口进行绑定的话,比如腾讯的服务器 你每天登陆QQ是不是得先向腾讯打电话咨询服务端口是什么,显然是行不通的.

下载链接: 点击直达

绑定信息

一般情况下,在一台电脑上运行的网络程序有很多,为了不与其他的网络程序占用同一个端口号,往往在编程中,udp的端口号一般不绑定,但是如果要做成一个服务端的话,肯定而且必须是要绑定的,举个栗子.我们生活中常用的110,120,119这些便民服务号,是不是也是一种绑定呢?

# 绑定其实很简单.
local_addr = ('', port) # 两个参数代表ip地址和要绑定的端口号,注意是元祖的格式. 我们必须绑定本机ip 所以可以省略不写 也可以写本机ip,但是不允许绑定非本机ip
# 此处的s 对应你创建出来的套接字
# 执行绑定
s.bind(local_addr)
# 执行绑定二
s.bind(('', port))

绑定过后我们在运行网络调试工具 ,发现每次的端口号都是固定的了.我们每次做数据回复的时候就不用再修改端口了.

总结

  • 一个udp网络程序,可以不绑定,此时操作系统会随机分配一个端口,如果重新运行代码,此端口有极大可能发生变化
  • 一个udp网络程序,也可以绑定信息,(端口),如果绑定成功,操作系统就会使用这个端口来进行区别收到的网络数据是不是此进程的,实现数据精准分发.

python3中的socket的更多相关文章

  1. python3中socket套接字的编码问题解决

    一.TCP 1.tcp服务器创建 #创建服务器 from socket import * from time import ctime #导入ctime HOST = '' #任意主机 PORT = ...

  2. 详解:Python2中的urllib、urllib2与Python3中的urllib以及第三方模块requests

    在python2中,urllib和urllib2都是接受URL请求的相关模块,但是提供了不同的功能.两个最显著的不同如下: 1.urllib2可以接受一个Request类的实例来设置URL请求的hea ...

  3. 常见的爬虫分析库(1)-Python3中Urllib库基本使用

    原文来自:https://www.cnblogs.com/0bug/p/8893677.html 什么是Urllib? Python内置的HTTP请求库 urllib.request          ...

  4. Python3中Urllib库基本使用

    什么是Urllib? Python内置的HTTP请求库 urllib.request          请求模块 urllib.error              异常处理模块 urllib.par ...

  5. python3 进程间通信之socket.socketpair()

    python3 进程间通信之socket.socketpair() socket.socketpair()是什么鬼东西? socket.socketpair()函数仅返回两个已经连接的套接字对象,参数 ...

  6. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  7. Python3中的字符串函数学习总结

    这篇文章主要介绍了Python3中的字符串函数学习总结,本文讲解了格式化类方法.查找 & 替换类方法.拆分 & 组合类方法等内容,需要的朋友可以参考下. Sequence Types ...

  8. EBS中利用Socket与外系统通信

    某银行要求做一个签到签退功能,日终EBS系统发送报文与核心系统对帐,规定利用Socket来做传送,记录下步骤: 1.编辑: $INST_TOP/ora/10.1.3/j2ee/oacore/appli ...

  9. Python3中使用PyMySQL连接Mysql

    Python3中使用PyMySQL连接Mysql 在Python2中连接Mysql数据库用的是MySQLdb,在Python3中连接Mysql数据库用的是PyMySQL,因为MySQLdb不支持Pyt ...

随机推荐

  1. git、github、gitlab之间的关系

    GIt-版本控制工具:GitHub-一个网站平台,提供给用户空间存储git仓储,保存用户的一些数据文档或者代码等:GitLab - 基于Git的项目管理软件. Git分布式版本控制系统 Git是一款自 ...

  2. RPC是什么?

    初学微服务,一点会问RPC是什么,通常网上的资料会说,是一种协议,然后说得很复杂,一堆概念,拜托,我只是想知道RPC是什么,而不是  怎么实现怎么做. RPC就是想实现函数调用模式的网络化,A服务(微 ...

  3. Error response from daemon: conflict: unable to remove repository reference 解决方案

    由于前一章演示用的镜像没什么用准备删除 docker image rm hello-world:latest Error response from daemon: conflict: unable ...

  4. day20-多并发编程基础(一)

    重新写一下吧,系统奔溃了,以前写的完全没了,悲催,今日主要写进程 1. 进程的理论知识 2. python中的进程操作 开始今日份整理,加油,你是最胖的!!! 1. 进程的理论知识 1.1 操作系统的 ...

  5. Django 路由系统(URLconf)

    URLconf是什么? URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的view函数之间的映射表:你就是以这种方式告诉Django,对于这个URL调 ...

  6. C++ shared_ptr、unique_ptr、weak_ptr

    shared_ptr unique_ptr weak_ptr 内存泄漏 智能指针 引用计数 循环引用 reset

  7. java将对象转map,map转对象工具类

    /** * 将map转换为一个对象 * * @param map * @param beanClass * @return * @throws Exception */ public static O ...

  8. PS调出清新风格社区街拍照片

    原图: 首先呢,我们还是先看一下在直方图,但是呢,你会发现,这张照片的直方图毫无特色. 简直是标准得不能再标准的直方图了.所以各位那我们就跳过这步吧.你要真跳过这步你就完了.直方图还有三个儿子啊,通道 ...

  9. openstack搭建之-nova配置(10)

    一. base节点设置数据库 mysql -u root -proot CREATE DATABASE nova_api; CREATE DATABASE nova; CREATE DATABASE ...

  10. 微信小程序手机预览请求不到数据(最后一条不明所以)

    本地开发调试小程序时,用手机预览需要有如下设置:1.微信开发者工具中设置:不校验安全域名.web-view 域名.TLS 版本以及 HTTPS 证书.这样在有网络请求的时候,就可以访问本地的服务器了, ...