:重点知识点--IO编程 15 Python 基础:程序猿必懂知识之正则表达式 16 Python 基础:重点知识点--Pygame的基础知识梳理 17 Python 基础:重点知识点--Pygame实现儿时经典游戏坦克大战...动态分配是指当一个系统进程或应用程序进程需要网络通信时,它向主机申请一个端口,主机从可用的端口号中分配一个供它使用。 当这个进程关闭时,同时也就释放了所占用的端口号。 3.3 怎样查看端口?...socket创建的套接字默认的属性是主动的,使用listen将其变为被动的,这样就可以接收别人的链接了 tcpSerSocket.listen(5) # 数字表示最多同时连接或接受多少个用户链接...# 关闭为这个客户端服务的套接字,只要关闭了,就意味着为不能再为这个客户端服务了,如果还需要服务,只能再次重新连接newSocket.close()# 关闭监听套接字,只要这个套接字关闭了,就意味着整个程序不能再接收任何新的客户端的连接...socket创建的套接字默认的属性是主动的,使用listen将其变为被动的,这样就可以接收别人的链接了 tcpSerSocket.listen(5) whileTrue: #一个循环服务1个客户 #如果有新的客户端来链接服务器
if语句的使用 在Python中,要构造分支结构可以使用if、elif和else关键字。...套接字这个词对很多不了解网络编程的人来说显得非常晦涩和陌生,其实说得通俗点,套接字就是一套用C语言写成的应用程序开发库,主要用于实现进程间通信和网络编程,在网络应用开发中被广泛使用。...在Python中也可以基于套接字来使用传输层提供的传输服务,并基于此开发自己的网络应用。实际开发中使用的套接字可以分为三类:流套接字(TCP套接字)、数据报套接字和原始套接字。...TCP套接字 所谓TCP套接字就是使用TCP协议提供的传输服务来实现网络通信的编程接口。在Python中可以通过创建socket对象并指定type属性为SOCK_STREAM来使用TCP套接字。...在Python中也可以使用UDP套接字来创建网络应用,对此我们不进行赘述,有兴趣的读者可以自行研究。
套接字有两种,分别是基于文件型的和基于网络型的 Unix 套接字是第一个套接字家族,其“家族名”为AF_UNIX(在POSIX1.g标准中也叫AF_LOCAL),表示“地址家族:Unix”,包括python...Python 2.5 中加入了一种 Linux 套接字的支持:AF_NETLINK(无连接[见下])套接字家族让用户代码与内核代码之间的 IPC 可以使用标准 BSD 套接字接口。...而且,相对之前那些往操作系统中加入新的系统调用,proc 文件系统支持或是“IOCTL”等笨重的方案来说,这种方法显得更为优美,更为安全 python只支持AF_UNIX AF_NETLINK和AF_INET...s.makefile() 创建一个与该套接字相关连的文件 三 简单实例 注意: 必须先启动服务器端,因为服务器端创造接口和IP地址以供客户端访问 1 只能输入一次的基础配置 1 服务器端配置...2 可以多次输入的应用: 1 服务端: ? 2 客户端: ? 3 测试: ? 3使用sys 模块进行shell命令的使用 1 服务器端 ? 2 客户端: ? 3 测试 ? ?
,故有如下两种解决方案 方案一:在发送消息前,将要发送的字节流总大小让接收端知晓,然后接收端来一个死循环接收完所有数据 ?...if len(cmd)<1 or cmd == 'quit': flag = False #防止死循环,在多个客户端连接时,可以去掉...s.connect() 主动初始化TCP服务器连接 s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常 公共用途的套接字函数 s.recv()...() 返回指定套接字的参数 s.setsockopt() 设置指定套接字的参数 s.close() 关闭套接字 面向锁的套接字方法 s.setblocking(...) 设置套接字的阻塞与非阻塞模式 s.settimeout() 设置阻塞套接字操作的超时时间 s.gettimeout() 得到阻塞套接字操作的超时时间 面向文件的套接字的函数
因此,有时人们也把套接字称为“伯克利套接字”或“BSD 套接字”。一开始,套接字被设计用在同 一台主机上多个应用程序之间的通讯。这也被称进程间通讯,或 IPC。...,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET) tcp协议和...套接字(socket)初使用 基于TCP协议的socket tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端 windows如果不通,注意关闭防火墙 server端 import socket...client端执行结果如下 hello 上面例子,只是互相发送了一次消息,就关闭了,如何互相一直发送消息?...bytes) ret = sk.recv(1024) # 接收消息 print(ret.decode('utf-8')) # 打印接收的消息 运行效果--(先执行server,在执行
,更容易及时发现冲突 一旦发现冲突,可以使用 as 关键字 给其中一个工具起一个别名 from...import * # 从 模块 导入 所有工具 from 模块名1 import * 注意 这种方式不推荐使用...,因为函数重名并没有任何的提示,出现问题不好排查 1.3 模块的搜索顺序[扩展] Python 的解释器在 导入模块 时,会有以下操作: 搜索 当前目录 指定模块名的文件,如果有就直接导入 如果没有...,再搜索 系统目录 在开发时,给文件起名,不要和 系统的模块文件 重名 Python 中每一个模块都有一个内置属性 __file__ 可以 查看模块 的 完整路径 示例 - 随机生成 0~10...__name__ 属性可以做到,测试模块的代码 只在测试情况下被运行,而在 被导入时不会被执行!...开发的 并且被 程序员广泛使用 的 Python 包 / 模块 例如 pygame 就是一套非常成熟的 游戏开发模块 pip 是一个现代的,通用的 Python 包管理工具 提供了对 Python
socket()函数 了解了网络,那在Python中我们是如何进行网络编程呢?...其实很简单,在Python 中,我们用 socket 模块中socket() 函数 来创建套接字,语法格式如下: import socket socket.socket(family, type, proto...套接字使用流程 与 文件的使用流程很类似 创建套接字 使用套接字收/发数据 关闭套接字 TCP Socket(TCP 套接字) import scoket # 创建TCP套接字 s = socket.socket...) # 套接字功能的使用 # 此处省略......socket.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常 公共用途的套接字函数 socket.recv() 接收TCP数据,数据以字符串形式返回,
socket()函数 了解了网络,那在Python中我们是如何进行网络编程呢?...其实很简单,在Python 中,我们用 socket 模块中socket() 函数 来创建套接字,语法格式如下: import socket socket.socket(family, type, proto...(流式套接字,主要用于 TCP 协议) 或SOCK_DGRAM (数据报套接字,主要用于 UDP 协议) protocol: 一般不填默认为 0 创建 Socket(套接字) 套接字使用流程 与...文件的使用流程很类似 创建套接字 使用套接字收/发数据 关闭套接字 TCP Socket(TCP 套接字) import scoket # 创建TCP套接字 s = socket.socket(socket.AF_INET...) # 套接字功能的使用 # 此处省略...
,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET。...,而不是抛出异常公共用途的套接字函数s.recv() 接收TCP数据s.send() 发送TCP数据(send在待发送数据量大于己端缓存区剩余空间时,数据丢失...例如基于tcp的套接字客户端往服务端上传文件,发送时文件内容是按照一段一段的字节流发送的,在接收方看了,根本不知道该文件的字节流从何处开始,在何处结束 所谓粘包问题主要还是因为接收方不知道消息之间的界限...不会使用块的合并优化算法,, 由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包,在每个UDP包中就有了消息头(消息来源地址,端口等信息),...,会继续上次继续接收,己端总是在收到ack时才会清除缓冲区内容。
在进行socket创建时,使用SocketServer会大大减少创建的步骤,并且SocketServer使用了select它有4个类:TCPServer,UDPServer,UnixStreamServer...测试案例 服务器端为一个时间戳服务器,在接收到客户端发来的数据后,自动回复。 客户端,等待用户输入,回车后向服务器发送用户输入的内容。 分别在python2.7和python3.6下测试。...在启动时需要先启动服务器端,在启动客户端。...它定义了接口,如下所述,但是大多数的方法不实现,在子类中进行细化。 •BaseServer.fileno():返回服务器监听套接字的整数文件描述符。...•BaseServer.sockettype:服务器使用的套接字类型; socket.SOCKSTREAM和socket.SOCK_DGRAM等。
它规定了计算机在因特网上进行通信时应当遵守的规则,是所有计算机网络实现通信的一套规则。换句话说,任何计算机系统只要遵守IP协议就可以与因特网互联互通。...可以在cmd输入ipconfig查看信息。 IP地址不便于记忆,通常会使用主机名来代替IP地址,即使用DNS域名解析协议。比如输入“baidu.com”就能访问到百度了,不必输百度的IP地址。...()关闭连接sock.share()复制套接字并准备与目标进程共享sock.close()关闭套接字sock.detach()在未关闭文件描述符的情况下关闭套接字并返回文件描述符sock.ioctl()...若连接成功,那么客户端与服务器的连接就建立了,客户端发送数据请求,服务器接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互就结束了。...首先通过端口机制进行复用和分解,每个UDP应用程序在发送数据报文之前,必须与操作系统协商获取相应的协议端口及端口号,然后根据目的端口号进行分解,接收端使用UDP的校验进行确认,查看UDP报文是否正确到达了目标主机的相应端口
然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。...3)错误校验 TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。 4) 流量控制和阻塞管理 流量控制用来避免主机发送得过快而使接收方来不及完全收下。...socket创建的套接字默认的属性是主动的,使用listen将其变为被动的,这样就可以接收别人的链接了 tcp_server_socket.listen(128) # 如果有新的客户端来链接服务器,那么就产生一个新的套接字专门为这个客户端服务...,这是做tcp服务器时必须要做的 当客户端需要链接服务器时,就需要使用connect进行链接,udp是不需要链接的而是直接发送,但是tcp必须先链接,只有链接成功才能通信 当一个tcp客户端连接服务器时...,服务器端会有1个新的套接字,这个套接字用来标记这个客户端,单独为这个客户端服务 listen后的套接字是被动套接字,用来接收新的客户端的链接请求的,而accept返回的新套接字是标记这个新客户端的 关闭
AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET. 5.tcp协议和udp协议 TCP(Transmission Control...发送端可以是一K一K地发送数据,而接收端的应用程序可以两K两K地提走数据,当然也有可能一次提走3K或6K数据,或者一次只提走几个字节的数据。...socket数据传输过程中的用户态与内核态说明 例如基于tcp的套接字客户端往服务端上传文件,发送时文件内容是按照一段一段的字节流发送的,在接收方看了,根本不知道该文件的字节流从何处开始,在何处结束 此外...不会使用块的合并优化算法,, 由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包,在每个UDP包中就有了消息头(消息来源地址,端口等信息),...2.实际上,主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的 socket的更多方法介绍 服务端套接字函数 s.bind() 绑定(主机,端口号)到套接字 s.listen
socket也叫套接字,是对各种协议的封装,实现收发数据。 Python里socket工作过程:(图片来自网络) ? socket在Python中实际上是一个模块,实现发送和接收数据的功能。...因为socket是一个类,所以只导入模块需要使用socket.socket()创建一个socket对象。...SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。...有时候服务器运行程序时间长,没有到接收语句,而客户端发送数据太快,导致出错 在客户端加个sleep... logging使用filehandler中文乱码 创建filehandler时,写入encode...“粘包”:A给B连续发送两个send,B接收到的两个数据都混在一起,分不清第一次还是第二次接收的 原因是,A发送时存在缓存区,大约0.5S后缓存消失 如果想要分开两次的数据,A使用send后立即执行recv
,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET) TCP和UDP对比 TCP(Transmission Control...客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束 下面将介绍socket()模块函数用法 Python中,我们用socket()函数来创建套接字...,出错时返回出错码,而不是抛出异常 公共用途的套接字函数 s.recv() 接收TCP数据 s.send() 发送TCP数据(send在待发送数据量大于己端缓存区剩余空间时...这些I/O缓冲区特性可整理如下: 1.I/O缓冲区在每个TCP套接字中单独存在; 2.I/O缓冲区在创建套接字时自动生成; 3.即使关闭套接字也会继续传送输出缓冲区中遗留的数据; 4.关闭套接字将丢失输入缓冲区中的数据...,会继续上次继续接收,己端总是在收到ack时才会清除缓冲区内容。
最近很多读者想学习使用python来制作游戏,其中最经典的工具包就是Pygame ,如果单纯只看之前分享的是个游戏代码案例,直接来制作一款游戏有些难度 ?...在 pygame 第一次导入之前,当pygame.font 模块确定环境变量 PYGAME_FREETYPE 时使用基于 pygame.ftfont 的 pygame.freetype 模块。...get_focused() -> bool 当窗口获得键盘的输入焦点时返回 True,如果窗口需要确保不失去键盘焦点,可以使用 pygame.event.set_grab(True) 独占所有的输入接口...Python 2.x字符串或Python 3.x字节对象可以是路径名或缓冲区对象。使用'file'或'buffer'关键字来避免歧义; 否则Sound可能会猜错。...loops参数控制第一次播放后样本重复的次数。值 5 表示声音将播放一次,然后重复播放五次,因此共播放六次。默认值(0)表示声音不重复,因此只播放一次。
tcp 协议的数据不会丢,没有收完的包下一次会接着收取上一次没收完的数据,本端总是在收到ack时才会清除缓冲区内容。数据是可靠的,但是会粘包。...,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 协议)或者 SOCK_DGRAM(数据报套接字,主要用于 UDP 协议) ?.../发数据 # 关闭socket udp_socket.close() 上面的代码就是对于UDP的一次完整的调用 套接字使用流程 与 文件的使用流程很类似: 1.创建套接字 2.使用套接字收/发数据...3.关闭套接字 # # Tello Python3 Control Demo # import threading import socket import sys import time host...python3中的编码转换 使用socket发送的是数据的二进制,需要将字符串转换成bytes str.encode() 使用socket接收的是数据的二进制,需要将bytes转换成字符 bytes.decode
也可以使用 # coding=utf8 unicode 字符串 在 Python 2.x 中,即使指定了文件使用 UTF-8 的编码格式,但是在遍历字符串时,仍然会 以字节为单位遍历 字符串 要能够 正确的遍历字符串...知名的第三方团队 开发的 并且被 程序员广泛使用 的 Python 包 / 模块 例如 pygame 就是一套非常成熟的 游戏开发模块 pip 是一个现代的,通用的 Python 包管理工具 提供了对...pygame # 将模块安装到 Python 3.x 环境 $ sudo pip3 install pygame $ sudo pip3 uninstall pygame 在 Mac 下安装 iPython...解释器 抛出异常 时,最后一行错误信息的第一个单词,就是错误类型 异常类型捕获演练 —— 要求用户输入整数 需求 提示用户输入一个整数 使用 8 除以用户输入的整数并且输出 try: num...异常类 在开发时,如果满足 特定业务需求时,希望 抛出异常,可以: 创建 一个 Exception 的 对象 使用 raise 关键字 抛出 异常对象 需求 定义 input_password 函数
所以在这个while循环中,还要去接收玩家的输入,以及处理游戏中的各种逻辑判断、运动、碰撞等等。...在我们程序的主循环里,做了对退出事件的响应: for event in pygame.event.get(): if event.type == pygame.QUIT: #接收到退出事件后退出程序...而if event.type == pygame.QUIT:就是在判断,导演是不是喊停收工了。这一切都由计算机在很短的时间内处理,以至于玩家感觉是连贯的。...有些大型3D游戏需要在一次循环内做很多事情,需要进行复杂的物理运算、计算光线的照射效果、处理大量电脑角色的智能、网络信息通讯等。在配置不高的电脑上,这些计算花费的时间就多,游戏刷新画面的频率就变慢了。...面向零基础初学者的编程课 每天5分钟,轻松学编程 回复『 p 』查看python课程 回复『 g 』查看pygame课程 回复『 t 』查看习题
领取专属 10元无门槛券
手把手带您无忧上云