Python进阶三部曲网络编程.md
来源:互联网 发布:童声配音软件 编辑:程序博客网 时间:2024/03/28 19:03
使用Python进行网络编程时,实际上是在Python程序中本身这个进程内,连接到指定服务器进程的通信端口进行通信,所以网络通信也可以看成两个进程间的通信。
提到网络编程必须提到的一个概念是Socket,Socket是网络编程的一个抽象概念,通常我们用一个Socket表示打开了一个网络连接,而打开一个socket需要知道目标计算机的IP地址和端口号,再指定协类型即可。
Python提供了两个基本的Socket模块:
- 提供了标准的BSD Sockets API
- SocketServer,提供了服务器中心类,可以简化网络服务器的开发。
Socket类型。
套接字格式为:socket(family,type[,protocal]),使用给定的地铁,套接字类型,协议编号(默认为0)来创建套接字。
Socket类型及说明。
s=socket socket( socket.AF_INET,socket SOCK_STREAM)
创建UDP Socket s=socket.socket(socket.AF_INET,socket SOCK_DGRAM
Socket函数
Socket函数及说明。
TCP编程
网络编程一般包括肉部分:服务器和客户端,TCP是一种面向连接的通信方式,主动发起连接的叫客户端,被动响应的连接叫服务器。
创建服务端:
首先说一下服务器,创建和运行服务端一般需要5个步骤:
- 创建Socket,绑定Socket到本地IP与端口。
- 开始监听连接
- 进入循环,不断接收客户的连接请求
- 接收传来的数据,并发送给对方数据。
- 传输完毕后,关闭Socket.
# coding:utf-8import socketimport threadingimport timedef dealClient(sock, addr): # 接收传来的数据,并发送给对方数据。 print('Accpet new conn from %s:%s' % addr) sock.send(b'hello, i am server') while True: data = sock.recv(1024) time.sleep(1) if not data or data.decode('utf-8') == 'exit': break print('%s!' % data.decode('utf-8')) sock.send(('Loop_msg:%s!' % data.decode('utf-8')).encode('utf-8')) # 关闭socket sock.close() print('conn from %s:%s close.' % addr)if __name__ == "__main__": # 第一步:创建一个基于IPV4和TCP协议的Socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # socket绑定IP(127.0.0.1为本机IP)与端口。 s.bind(('127.0.0.1', 9999)) # 监听连接。 s.listen(5) print('wating for conn...') while True: # 接收一个新连接, sock, addr = s.accept() # 创建新线程来处理TCP连接。 t = threading.Thread(target=dealClient, args=(sock, addr)) t.start()
创建客户端:
- 创建Socket,连接远端地址。
- 连接后发送数据和接收数据。
- 传输完毕后,关闭Socket
import socket# 初始化Sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接目标的IP和端口。s.connect(('127.0.0.1', 9999))# 接收数据,print('-->>', s.recv(1024).decode('utf-8'))# 发送数据。s.send(b'Hello,i am a client')print('-->>' + s.recv(1024).decode('utf-8'))s.send(b'exit')# 关闭sockets.close()先运行,服务端,再运行客户端,得到:-->> hello, i am server-->>Loop_msg:Hello,i am a client!
UDP编程,
TCP通信需要一个建立可靠连接的过程,而且通信双方以流的形式发送数据。相对TCP,UDP则是面向无连接的协议,使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发送数据包,但是不关心是否能到达目的端,虽然使用UDP传输数据不可靠,但由于它没有建立连接的过程,速度比TCP快得多,对于不要求可靠到达的数据,就可以使用UDP协议。
使用UDP协议,TCP一样,也有服务端与客房端之分,UDP编程相对于TCP编程比较简单,服务端创建和运行只需要3个步骤:
- 创建Socket,绑定指定的IP和端口。
- 直接发送数据和接收数据,
- 关闭Socket
创建服务端:
# coding:utf-8import socket# 创建Socket,绑定指定的IP和端口。# SOCK_DGRAM 指定了这个Socket的类型是UDP,绑定端品和TCP示例一样。s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)s.bind(('127.0.0.1', 9999))print('bind udp on 9999...')while True: # 直接发送数据和接收数据。 data, addr = s.recvfrom(1024) print('received from %s:%s.' % addr) s.sendto(b'hello,%s!' % data, addr)
创建客户端
创建Socket,直接可以与服务端进行数据交互换。
# coding:utf-8import sockets = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)for data in [b'hello', b'world',b'python',b'android',b'java']: # 发送数据 s.sendto(data, ('127.0.0.1', 9999)) # 接收数据, print(s.recv(1024).decode('utf-8'))s.close()得到:hello,hello!hello,world!hello,python!hello,android!hello,java!
以上就是UDP服务端和客房端数据交互的流程,UDP的使用与TCP类型,但是不需要建立连接,此外,服务器绑定UDP端口和TCP端口互不冲突,即UDP的9999端品与TCP的9999端口可以各自绑定。
- Python进阶三部曲网络编程.md
- Python进阶三部曲之IO操作
- Python进阶三部曲之IO操作
- python进阶九_网络编程
- Python进阶学习小结-1.md
- JAVA进阶-网络编程
- python编程进阶
- python编程进阶
- [iOS进阶]Socket 网络编程
- Java网络编程进阶版
- Python进阶-函数式编程
- python进阶-函数式编程
- Python进阶-面向对象编程
- Python面向对象编程进阶
- Ubuntu发烧友三部曲 进阶篇
- 跟我一起学python(九),网络编程(进阶篇)
- 我与python约个会:30.企业级开发进阶2:网络编程
- 网络编程进阶--套接字深入编程
- chkconfig安装包和安装命令。free
- float数据在内存中的存储方法
- easy ui 表格格式化动态绑定,表格格式化后获取表格值是value而不是显示的值
- java 实现的simhash中文指纹项目
- Range Sum Query
- Python进阶三部曲网络编程.md
- 前台js解析json数据
- kernel解析设备树生成设备节点过程
- Glide-更多图片变换,glide-transformations的使用(六)
- 包
- 密码加密的最好方式
- 1111111
- 读《1984》小说
- Linux学习(部分重要目录结构)