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. VMware14虚拟机下安装Centos6.5

    一.下载VMware14,CentOS6.5光盘映像文件. https://pan.baidu.com/s/1WaTBnYuNC5dLYM_Ra2bjBQ 二.安装过程 1.打开VMware虚拟机 — ...

  2. WEB框架-Django组件学习-分页器学习

    1.分页器基础学习 1.1 补充知识-批量创建 数据库中数据批量创建,不要每创建一个就往数据库中塞一个,会造成撞库,造成大量I/O操作,速速较慢,应该采用一次性创建大量数据,一次性将大量数据塞入到数据 ...

  3. 洛谷P4057

    题目描述 “无体育,不清华”.“每天锻炼一小时,健康工作五十年,幸福生活一辈子” 在清华,体育运动绝对是同学们生活中不可或缺的一部分.为了响应学校的号召,模范好学生王队长决定坚持晨跑.不过由于种种原因 ...

  4. Nginx 关于进程数 与CPU核心数相等时,进程间切换的代价是最小的-- 绑定CPU核心

    在阅读Nginx模块开发与架构模式一书时: "Nginx  上的进程数 与CPU核心数相等时(最好每个worker进程都绑定特定的CPU核心),进程间切换的代价是最小的;" &am ...

  5. iOS 基础:Frames、Bounds 和 CGGeometry

    https://segmentfault.com/a/1190000004695617 原文:<iOS Fundamentals: Frames, Bounds, and CGGeometry& ...

  6. 工具(3): 转换Excel表格到MarkDown:exceltk

    源码和下载: 0.1.3 mac: https://github.com/fanfeilong/exceltk/blob/master/pub/exceltk.0.1.3.pkg windows: h ...

  7. Tutorial 01_熟悉常用的Linux操作和Hadoop操作

    (一)熟悉常用的Linux 操作cd 命令:切换目录 (1) 切换到目录“/usr/local” (2) 切换到当前目录的上一级目录 (3) 切换到当前登录Linux 系统的用户的自己的主文件夹  ...

  8. Write your own operating system Day(1)

    工具准备: VirtualBox.exe是一个免费的轻巧的虚拟机 Bz.exe是二进制编辑器 NASM则是用来编译汇编语言的,具体使用方法自行百度 HZK16.fnt 中文GB2312的二进制点阵文件 ...

  9. IdentityServer4【Reference】之Profile Service

    Profile Service 当创建令牌或者请求像Userinfo这种端点时,IdentityServer通常会需要用户的标识信息(identity information),默认情况下,Ident ...

  10. [转帖]SAP BASIS日常需要做的工作

    SAP BASIS日常需要做的工作 https://www.cnblogs.com/swordxia/p/4790684.html SAP Basis的一些日常工作包括用户权限管理.集团管理.数据库管 ...