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 相关文章推荐
wxpython中自定义事件的实现与使用方法分析
Jul 21 Python
Mac中升级Python2.7到Python3.5步骤详解
Apr 27 Python
Python字典,函数,全局变量代码解析
Dec 18 Python
Python批量修改图片分辨率的实例代码
Jul 04 Python
如何在mac环境中用python处理protobuf
Dec 25 Python
python3将变量写入SQL语句的实现方式
Mar 02 Python
Python如何根据时间序列数据作图
May 12 Python
Python爬虫爬取博客实现可视化过程解析
Jun 29 Python
scrapy结合selenium解析动态页面的实现
Sep 28 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
Jan 08 Python
Python3 多线程(连接池)操作MySQL插入数据
Jun 09 Python
Python TypeError: ‘float‘ object is not subscriptable错误解决
Dec 24 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后台多用户权限组思路与实现程序代码分享
2012/02/13 PHP
基于PHP CURL获取邮箱地址的详解
2013/06/03 PHP
PHP加密函数 Javascript/Js 解密函数
2013/09/23 PHP
搭建自己的PHP MVC框架详解
2017/08/16 PHP
基于jquery的回到页面顶部按钮
2011/06/27 Javascript
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
JavaScrip常见的一些算法总结
2015/12/28 Javascript
JavaScript中Form表单技术汇总(推荐)
2016/06/26 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
2016/11/23 Javascript
基于jQuery实现弹幕APP
2017/02/10 Javascript
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
使用puppeteer爬取网站并抓出404无效链接
2018/12/20 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
html-webpack-plugin修改页面的title的方法
2020/06/18 Javascript
[02:36]DOTA2混沌骑士 英雄基础教程
2013/11/26 DOTA
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
Django基础之Model操作步骤(介绍)
2017/05/27 Python
python入门之基础语法学习笔记
2020/02/08 Python
Django如何使用jwt获取用户信息
2020/04/21 Python
python3.7+selenium模拟淘宝登录功能的实现
2020/05/26 Python
python爬虫容易学吗
2020/06/02 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
销售人员中英文自荐信
2013/09/22 职场文书
建筑安全员岗位职责
2014/03/13 职场文书
2015年体育部工作总结
2015/04/02 职场文书
检察院起诉意见书
2015/05/20 职场文书
结婚仪式主持词
2015/06/29 职场文书
总结Python使用过程中的bug
2021/06/18 Python
python 对图片进行简单的处理
2021/06/23 Python
Python selenium绕过webdriver监测执行javascript
2022/04/12 Python
速龙x4-860k处理器相当于i几
2022/04/20 数码科技