我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python学习 :socket基础

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python学习 :socket基础

 socket基础

  什么是socket?

  - socket为接口通道,内部封装了IP地址、端口、协议等信息;我们可以看作是以前的通过电话机拨号上网的年代,socket即为电话线

  socket通信流程

  我们通过下面的图来了解socket的通信流程

 

  流程描述:

  - 1 服务器根据地址类型(ipv4,ipv6)、socket类型、协议创建socket

  - 2 服务器为socket绑定ip地址和端口号

  - 3 服务器socket监听端口号请求,随时准备接收客户端发来的连接,这时候服务器的socket并没有被打开

  - 4 客户端创建socket

  - 5 客户端打开socket,根据服务器ip地址和端口号试图连接服务器socket

  - 6 服务器socket接收到客户端socket请求,被动打开,开始接收客户端请求,直到客户端返回连接信息。这时候socket进入阻塞状态,

      所谓阻塞即accept()方法一直等到客户端返回连接信息后才返回,开始接收下一个客户端连接请求

  - 7 客户端连接成功,向服务器发送连接状态信息

  - 8 服务器accept方法返回,连接成功

  - 9 客户端向socket写入信息(或服务端向socket写入信息)

  - 10 服务器读取信息(客户端读取信息)

  - 11 客户端关闭

  - 12 服务器端关闭

 

  socket 方法

  - socket 方法中有两个参数:family、type

  family 的参数来确定服务器之间的通信

  - family = AF_INET :  服务器之间的通信

  - family = AF_INET6 :服务器之间的通信

  - family = AF_UNIX : UNIX系统中的进程间的通信

  type 的参数来确定连接协议

  - type = SOCK_STREAM : 用来建立 TCP

  - type = SOCK_Dgram :     用来建立 UDP

  其他方法

sk.bind(address)
  #s.bind(address) 将套接字绑定到地址。address地址的格式取决于地址族。在AF_INET下,以元组(host,port)的形式表示地址。

sk.listen(backlog)
  #开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量。
    #backlog等于5,表示内核已经接到了连接请求,但服务器还没有调用accept进行处理的连接个数最大为5
    #这个值不能无限大,因为要在内核中维护连接队列

sk.setblocking(bool)
  #是否阻塞(默认True),如果设置False,那么accept和recv时一旦无数据,则报错。

sk.accept()
  #接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。
  #接收TCP 客户的连接(阻塞式)等待连接的到来

sk.connect(address)
  #连接到address处的套接字。一般,address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。

sk.connect_ex(address)
  #同上,只不过会有返回值,连接成功时返回 0 ,连接失败时候返回编码,例如:10061

sk.close()
  #关闭套接字

sk.recv(bufsize[,flag])
  #接受套接字的数据。数据以字符串形式返回,bufsize指定最多可以接收的数量。flag提供有关消息的其他信息,通常可以忽略。

sk.recvfrom(bufsize[.flag])
  #与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址。

sk.send(string[,flag])
   #注意send发送的数据必须为byte
  #将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。即:可能未将指定内容全部发送。

sk.sendall(string[,flag])
  #将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。
   #内部通过递归调用send,将所有内容发送出去。

sk.sendto(string[,flag],address)
  #将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数。该函数主要用于UDP协议。

sk.settimeout(timeout)
  #设置套接字操作的超时期,timeout是一个浮点数,单位是秒。值为None表示没有超时期。一般,超时期应该在刚创建套接字时设置,因为它们可能用于连接的操作(如 client 连接最多等待5s )

sk.getpeername()
  #返回连接套接字的远程地址。返回值通常是元组(ipaddr,port)。

sk.getsockname()
  #返回套接字自己的地址。通常是一个元组(ipaddr,port)

sk.fileno()
  #套接字的文件描述符

简单实现两端聊天

------------------服务器端------------------
import socket

# 创建socket对象,socket 默认的参数为 family = AF_INET 、type = SOCK_STREAM
sk = socket.socket()

address = ('127.0.0.1',8000)
# 绑定IP地址与端口
sk.bind(address)

# 最大的等待数为5
sk.listen(5)

print('server is waiting...')
# 进行阻塞,等待客户端来连接
conn,addr = sk.accept()

# conn 为客户端的socket对象
inp = input('>>>')
conn.send(bytes(inp,'utf-8'))

# conn.close()
# 关闭与客户端的链接
-------------------------------------------

-------------------客户端-------------------
import socket

sk = socket.socket()

address = ('127.0.0.1',8000)
sk.connect(address)
# 连接进入服务端

# recv也会进行阻塞,recv一次接收的内容最大为1024k
data = sk.recv(1024)
print(str(data,'utf-8'))

  上述例子,我们实现了服务端与客户端的连接,并进行了聊天;

  - 首先,我们需要先打开服务端,此时服务端会进行阻塞,等待客户端的接入

  - 接着,我们就可以打开客户端连入服务端,此时即可以开始聊天

  在往后,我们还会学到服务端的并发聊天、远程操作、文件上传等相关操作

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python学习 :socket基础

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python学习 :socket基础

socket基础  什么是socket?  - socket为接口通道,内部封装了IP地址、端口、协议等信息;我们可以看作是以前的通过电话机拨号上网的年代,socket即为电话线  socket通信流程  我们通过下面的图来了解socket
2023-01-31

python基础学习-socket简介

导读socket简介,套接字可以看成是两个网络应用程序进行通信时,各自通信连接中的一个端点。通信时,其中的一个网络应用程序将要传输的一段信息写入它所在主机的Socket中,该Socket通过网络接口卡的传输介质将这段信息发送给另一台主机的S
2023-06-02

Python基础学习

第一个 Python 程序:Hello Worldprint("Hello World!")Python 控制流:if-else, if-elif-else:    if-else 语法:if 判断条件:    执行语句……else:   
2023-01-31

python 基础学习

#此代码关于python函数调用的理解学习#还不明白这段代码如何实现调用的!!!def apply_twice(func, arg):return func(func(arg))def add_five(x):return x + 5pri
2023-01-31

python基础学习3_if_for

if用于条件判断,如果满足条件就执行否则就继续直到结束,熟悉shell条件判断就觉得so easy格式:if condition1:  execute commandelif condition2:  execute commandelse
2023-01-31

python基础学习1

一.python第一个程序print("hello world")二.变量的命名规则  1. 字母数字下划线组成  2. 不能以数字开头,不能含有特殊字符和空格  3. 不能以保留字命名  4. 不能以中文命名  5. 定义的变量名应该有意
2023-01-30

python基础学习2

一.算数运算符+加法,-减法,*乘法,/除法,//地板除,%求余,**幂运算。二.逻辑运算符非not、且and、或or。优先级依次为not,and,or。三.print()end结尾print()#默认为print(end="\n"),想要
2023-01-30

python学习-4 python基础-

条件语句的原理:  2.举个例子:比大小  #!/usr/bin/env python# -*- coding:utf8 -*-a=input("请输入a:")b=input("请输入b:")if a > b: print("a >
2023-01-31

python学习-5 python基础-

1.if的基本语句    if条件:           内部代码块     else:            。。。。。。。。       print(‘。。。。。。。’)2.if语句支持嵌套  if条件:           内部代码块
2023-01-31

Python基础学习(二)

Python函数总结一、函数的基本用法1、概念: 函数是对程序逻辑进行结构化或是过程化的一种编程方法,其是组织好的,可重复使用的,用来实现单一,或者相同功能的代码段。 函数提高了应用点的模块性和代码的重复利用率 本质:函数是对功能的封装 形
2023-01-30

python学习-3 python基础-

1.基础知识~后缀名是可以是任意的~导入模块时,如果不是.py就会报错=》》所以尽量后缀名携程.py2.执行方式-python解释器3.   #!/usr/bin/env python          -----------这是解释器路径
2023-01-31

python socket学习

一、简单实例:实现客户端向服务端发送的信息,服务器收到信息后加上当前时间再返回给客户端服务端实现:#!/usr/bin/pythonimport socket, traceback, timehost = ''port = 8000s =
2023-01-31

python学习之路--python基础

本文主要介绍下python列表的的一些基本操作列表是我们在python编程中常用的数据类型之一,通过列表我们可以对数据实现最方便的存储、修改等操作。定义列表 1 names=['ZhangSan','LiSi','WangWu'] 列表的访
2023-01-30

python 基础学习 switch 语

switch 语法结构:        switch 语句用于编写多分支结构的程序,类似于if...elif...eles语句。        swtch 语句的表达的分支结果比if...elif...lese 语句表达的更清晰,代码的可读
2023-01-31

python基础学习19----sock

网络通信三要素ip地址:InetAddress 网络中设备的标识,不易记忆,可用主机名(计算机的标识号)端口号:用于标识进程的逻辑地址,不同进程的标识(正在运行的软件的标识号)传输协议:通讯的规则 常见协议:TCP,UDPIP地址IP地址是
2023-01-30

Python基础学习入门

Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。在命令行窗口输入"python" 命令来查看本地是否已经安装Python以及Python的安装版本Python下载Python官网:http://www.python.or
2023-06-02

Python学习基础篇(一)

Python简介和入门Python简介走进Pythonpython的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一
2023-01-31

Python 基础知识学习

1、Python 基础教程      Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。2、执行Python程序     实例(Python 2.0+)     print "Hello, World!";  3、环境搭建
2023-01-31

python学习总结二(python基础

转眼间已经2月份了,python学习总结二进行中ing,今年的目标和打算。。。哎动力哪来,继续吧。总结上篇 就是 对python 说包含的东东(字符串,数字,变量,操作符,函数,模块,类,列表,等) 总体简单解释下。后面详细说明一.语句和语
2023-01-31

python基础学习4----元组

元组又叫只读列表,不可以修改其内容1.创建元组tuple1=(1,3,2,4,5)tuple2=()#空元组tuple3=('a',)#元组中只有一个元素时要在元素后面加上逗号,否则会被当成其他数据类型处理tuple4=(1,'a',[1,
2023-01-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录