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实现的文件夹清理程序分享
Nov 22 Python
Python中splitlines()方法的使用简介
May 20 Python
用tensorflow构建线性回归模型的示例代码
Mar 05 Python
在NumPy中创建空数组/矩阵的方法
Jun 15 Python
python程序快速缩进多行代码方法总结
Jun 23 Python
简单了解Python生成器是什么
Jul 02 Python
redis数据库及与python交互用法简单示例
Nov 01 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
Feb 11 Python
python中pop()函数的语法与实例
Dec 01 Python
python中把元组转换为namedtuple方法
Dec 09 Python
python中Pexpect的工作流程实例讲解
Mar 02 Python
Python基础知识之变量的详解
Apr 14 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
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/03/02 无线电
PHP循环获取GET和POST值的代码
2008/04/09 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
不错的新闻标题颜色效果
2006/12/10 Javascript
window.location和document.location的区别分析
2008/12/23 Javascript
JQuery操作textarea,input,select,checkbox方法
2015/09/02 Javascript
javascript实现表单验证
2016/01/29 Javascript
JS实现简单的右下角弹出提示窗口完整实例
2016/06/21 Javascript
1秒50万字!js实现关键词匹配
2016/08/01 Javascript
nodejs中全局变量的实例解析
2017/03/07 NodeJs
babel的使用及安装配置教程
2018/02/22 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
2018/11/06 Javascript
js+html实现周岁年龄计算器
2019/06/25 Javascript
Vue 实例事件简单示例
2019/09/19 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
用Golang运行JavaScript的实现示例
2019/11/25 Javascript
VUE使用axios调用后台API接口的方法
2020/08/03 Javascript
在Vue中使用mockjs代码实例
2020/11/25 Vue.js
Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
2015/04/24 Python
Python 备份程序代码实现
2017/03/06 Python
浅谈使用Python变量时要避免的3个错误
2017/10/30 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
Centos部署django服务nginx+uwsgi的方法
2019/01/02 Python
Python实现SQL注入检测插件实例代码
2019/02/02 Python
详解Python可视化神器Yellowbrick使用
2019/11/11 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
浅谈HTML5新增及移除的元素
2016/06/27 HTML / CSS
英国著名音像制品和图书游戏购物网站:Zavvi
2016/08/04 全球购物
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
遗体告别仪式主持词
2014/03/20 职场文书
领导班子自我剖析材料
2014/08/16 职场文书
小学教育见习报告
2014/10/31 职场文书
三峡大坝导游词
2015/01/31 职场文书
后勤个人工作总结
2015/02/28 职场文书
2015初一年级组工作总结
2015/07/24 职场文书