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. mysql的函数与储存过程与pymysql的配合使用

    现在mysql上定义一个函数,一个储存过程 函数: delimiter \\ CREATE FUNCTION f2 ( num2 INT, num1 INT ) RETURNS INT BEGIN D ...

  2. Storm入门(三)HelloWorld示例

    一.配置开发环境 storm有两种操作模式: 本地模式和远程模式.使用本地模式的时候,你可以在你的本地机器上开发测试你的topology, 一切都在你的本地机器上模拟出来; 用远程模式的时候你提交的t ...

  3. slice()和splice()区别

    1.slice(start,end):方法可从已有数组中返回选定的元素,返回一个新数组,包含从start到end(不包含该元素)的数组元素. 注意:该方法不会改变原数组,而是返回一个子数组,如果想删除 ...

  4. python Socket socketserver

    Socket 套接字 socket的 类型 实现socket对象时传入 到socket 类中 socket.AF_INET 服务器间的通讯 IPv4 socket.AF_INET6 IPv6 sock ...

  5. Visual Studio中Image Watch的使用

    Imag watch的简介 Image Watch是一个VS插件,能够让你在调试一个OpenCV程序的时候,看到内存中的图像,这对跟踪bug或者理解一段代码非常有帮助.(原文:Image Watch ...

  6. .NET IL实现对象深拷贝

    对于深拷贝,通常的方法是将对象进行序列化,然后再反序化成为另一个对象.例如在stackoverflow上有这样的解决办法:https://stackoverflow.com/questions/785 ...

  7. Linux内存管理 (22)内存检测技术(slub_debug/kmemleak/kasan)

    专题:Linux内存管理专题 关键词:slub_debug.kmemleak.kasan.oob.Redzone.Padding. Linux常见的内存访问错误有: 越界访问(out of bound ...

  8. 8个Python高效数据分析的技巧

    一行代码定义List 下面是使用For循环创建列表和用一行代码创建列表的对比. x = [1,2,3,4] out = [] for item in x: out.append(item**2) pr ...

  9. 最简单易懂的Spring Security 身份认证流程讲解

    最简单易懂的Spring Security 身份认证流程讲解 导言 相信大伙对Spring Security这个框架又爱又恨,爱它的强大,恨它的繁琐,其实这是一个误区,Spring Security确 ...

  10. 一段c++代码实现睡眠功能

    #ifdef ACL_UNIX struct timeval tv; tv.tv_sec = delay / 1000; tv.tv_usec = (suseconds_t) (delay - tv. ...