Python网络编程详解


Posted in Python onOctober 31, 2017

1、服务器就是一系列硬件或软件,为一个或多个客户端(服务的用户)提供所需的“服务”。它存在唯一目的就是等待客户端的请求,并响应它们(提供服务),然后等待更多请求。

2、客户端/服务器架构既可以应用于计算机硬件,也可以应用于计算机软件。

3、在服务器响应客户端之前,首先会创建一个通信节点,它能够使服务器监听请求。

一、套接字:通信端点

1、套接字

套接字是计算机网络数据结构,它体现了上节中所描述的“通信端点”的概念。在任何类型的通信开始之前,网络应用程序必须创建套接字。

有两种类型的套接字:基于文件和面向网络的。

2、套接字地址:主机-端口对

如果一个套接字像一个电话插孔-允许通信的一些基础设施,那么主机名和端口号就像区号和电话号码的组合。有效的端口号范围为0-65535(小于1024的端口号预留给了系统)

3、面向连接的套接字和与无连接的套接字

面向连接,在进行通信之前必须建立一个连接。实现这种连接类型主要协议是TCP(传输控制协议)

无连接,在通信之前并不需要建立连接。主要协议是UDP(用户数据报协议)

二、Python中的网络编程

1、socket()模块函数

为创建TCP/IP套接字:tcpSock = socket.socket(socket.AF_INEF,socket.SOCK_STREAM)

创建UDP/IP套接字:udpSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

2.常见的套接字对象方法和属性

名称 描述
服务器套接字方法  
s.bind()  将地址(主机名、端口号对)绑定到套接字上
s.listen() 设置并启动TCP监听器
s.accept() 被动接受TCP客户端连接,一直等待直到连接到达(阻塞)
客户端套接字方法  
s.connect() 主动发起TCP服务器连接
s.connect_ex() connect的扩展版本,此时会以错误代码的形式返回问题,而不是抛出一个异常
普通的套接字方法  
s.recv() 接受TCP消息
s.send() 发送TCP消息
s.sendall() 完整的发送TCP消息
s.recvfrom() 接收UDP消息
s.shutdown() 关闭连接
s.close() 关闭套接字

3、创建TCP服务器

ss = socket()  #创建服务器套接字
ss.bind()      #套接字与地址绑定
ss.listen()      #监听连接
inf_loop:       #服务器无限循环
  cs = ss.accept()     #接收客户端连接
  comm_loop:        #通信循环
    cs.recv()/cs.send()  #对话(接收、发送)
  cs.close()       #关闭客户端套接字
ss.close()        #关闭服务器套接字(可选)
#!/usr/bin/env python
#TCP时间戳服务器
from socket import *
from time import ctime
HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)
tcpSerSock = socket(AF_INET,SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
while True:
  print('waiting for connecting...')
  tcpClisock, addr = tcpSerSock.accept()
  print('...connected from:',addr)
  while True:
    data = tcpClisock.recv(BUFSIZ)
    if not data:
      break
    tcpClisock.send('[%s] %s' % (bytes(ctime(),'utf-8'),data))
  tcpClisock.close()
tcpSerSock.close()

4、创建TCP客户端

cs = socket()
cs.connect()
comm_loop:
  cs.send()/cs.recv()
cs.close()
#!/usr/bin/env python
#TCP时间戳客户端
from socket import *
HOST = '127.0.0.1'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)
tcpClisock = socket(AF_INET,SOCK_STREAM)
tcpClisock.connect(ADDR)
while True:
  data = input('> ')
  if not data:
    break
  tcpClisock.send(data)
  data = tcpClisock.recv(BUFSIZ)
  if not data:
    break
  print(data.decode('utf-8'))
tcpClisock.close()

5、创建UDP服务器

ss = socket()
ss.bind()
inf_loop:
  cs = ss.recvfrom()/ss.sendto()
ss.close()
#!/usr/bin/env python
#UDP时间戳服务器
from socket import *
from time import ctime
HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)
udpSerSock = socket(AF_INET,SOCK_DGRAM)
udpSerSock.bind(ADDR)
while True:
  print('waiting for message...')
  data, addr=udpSerSock.recvfrom(BUFSIZ)
  udpSerSock.sendto('[%s] %s' % (ctime(),data),addr)
  print('...received from and returned to:',addr)
udpSerSock.close()

6、创建UDP客户端

cs = socket()
comm_loop:
  cs.send()/cs.recvfrom()
cs.close()
#!/usr/bin/env python
#UDP时间戳客户端
from socket import *
HOST = 'localhost'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)
udpClisock = socket(AF_INET,SOCK_DGRAM)
while True:
  data = input('> ')
  if not data:
    break
  udpClisock.sendto(data,ADDR)
  data, ADDR=udpClisock.recvfrom(BUFSIZ)
  if not data:
    break
  print(data)
udpClisock.close()

以上就是本文关于Python网络编程详解的全部内容,希望对大家有所帮助。欢迎参阅:Python中enumerate函数代码解析、python数据类型判断type与isinstance的区别实例解析、python中requests库session对象的妙用详解等,有什么问题可以随时留言,有问题我就改。。。

Python 相关文章推荐
python查找第k小元素代码分享
Dec 18 Python
Python pickle模块用法实例分析
May 27 Python
python获取外网ip地址的方法总结
Jul 02 Python
Python数据操作方法封装类实例
Jun 23 Python
Python3中类、模块、错误与异常、文件的简易教程
Nov 20 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
Nov 22 Python
python 画三维图像 曲面图和散点图的示例
Dec 29 Python
浅谈python多进程共享变量Value的使用tips
Jul 16 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
Oct 17 Python
Python for循环与getitem的关系详解
Jan 02 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
Jan 02 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
Feb 20 Python
Python中enumerate函数代码解析
Oct 31 #Python
python数据类型判断type与isinstance的区别实例解析
Oct 31 #Python
python中requests库session对象的妙用详解
Oct 30 #Python
Python编程之黑板上排列组合,你舍得解开吗
Oct 30 #Python
Python数据结构与算法之列表(链表,linked list)简单实现
Oct 30 #Python
Python进程间通信之共享内存详解
Oct 30 #Python
import的本质解析
Oct 30 #Python
You might like
php初学者写及时补给skype用户充话费的小程序
2008/11/02 PHP
PHP面向对象学习笔记之一 基础概念
2012/10/06 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
2016/09/22 PHP
php preg_match的匹配不同国家语言实例
2016/12/29 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
基于JQuery实现CheckBox全选全不选
2011/06/27 Javascript
jQuery下拉友情链接美化效果代码分享
2015/08/26 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
微信小程序 LOL 英雄介绍开发实例
2016/09/30 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
vue中实现在外部调用methods的方法(推荐)
2018/02/08 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
微信小程序 Storage更新详解
2019/07/16 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
json.stringify()与json.parse()的区别以及用处
2021/01/25 Javascript
python清除字符串里非字母字符的方法
2015/07/02 Python
python爬虫之线程池和进程池功能与用法详解
2018/08/02 Python
python图形工具turtle绘制国际象棋棋盘
2019/05/23 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
利用jupyter网页版本进行python函数查询方式
2020/04/14 Python
Python爬虫分析微博热搜关键词的实现代码
2021/02/22 Python
python中Pexpect的工作流程实例讲解
2021/03/02 Python
html5声频audio和视频video等新特性详细说明
2012/12/26 HTML / CSS
中国一家综合的外贸B2C电子商务网站:DealeXtreme(DX)
2020/03/10 全球购物
简单说下OSPF的操作过程
2014/08/13 面试题
介绍一下linux文件系统分配策略
2013/02/25 面试题
公务员政审个人鉴定
2014/02/25 职场文书
大学生求职信例文
2014/06/29 职场文书
2014年预算员工作总结
2014/12/05 职场文书
学生自我评语
2015/01/04 职场文书
七年级英语教学反思
2016/02/15 职场文书
五年级作文之想象作文
2019/10/30 职场文书
详解vue中v-for的key唯一性
2021/05/15 Vue.js