Python网络编程 Python套接字编程


Posted in Python onSeptember 13, 2017

Python 提供了两个级别访问的网络服务。

低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法。
高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。

什么是 Socket?

Socket又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

socket()函数

Python 中,我们用 socket()函数来创建套接字,语法格式如下:

socket.socket([family[, type[, proto]]])

参数

family: 套接字家族可以使AF_UNIX或者AF_INET
type: 套接字类型可以根据是面向连接的还是非连接分为SOCK_STREAM或SOCK_DGRAM
protocol: 一般不填默认为0.

socket实现服务端与客户端的简单通信(模拟ssh的部分功能以及自动应答)

server端的简单程序示例:

#!/usr/bin/env python
#coding:utf-8
'''
file:server.py
date:9/8/17 3:43 PM
author:lockey
email:lockey@123.com
desc:socket编程服务器端,python3.6.2
'''
import re
import socket,time,os
s = socket.socket()   # 创建 socket 对象
host = '127.0.0.1'#socket.gethostname() # 获取本地主机名
port = 9999    # 设置端口
s.bind((host, port))  # 绑定端口
s.listen(5)     # 等待客户端连接
while True:
 conn, addr = s.accept()  # 建立客户端连接。
 print('conneted address:'.decode('utf-8'), addr)#显示连接到服务器的客户端的地址
 while True:
  data = conn.recv(1024)
  #接收到的客户端的请求或者返回
  if not data:
  #当返回信息为空或者请求为空时断开客户端连接
   print('Connection closed!')
   break;
 data = data.decode('utf-8')
 #以下前三个条件都是设置的自动检测应答,最后一个是根据输入的内容进行的命令执行,并将结果返回给客户端
  if re.findall(r'who',data):
   reply = 'I am lockey'.encode('utf-8')
  elif re.findall(r'gender',data):
   reply = 'A boy'.encode('utf-8')
  elif re.findall(r'age',data):
   reply = '23'.encode('utf-8')
  else:
   print('execute com:',data)
   cmd_res = os.popen(data).read()
   if not cmd_res:
   #对于命令的执行如果没有返回值的话就给客户端发送一条信息
    conn.send('No response'.encode('utf-8'))
    continue
   reply = cmd_res.encode('utf-8')
 conn.send(reply)
 #将结果发送给客户端

client端的简单实现:

#!/usr/bin/env python
#coding:utf-8
'''
file:client.py
date:9/8/17 3:43 PM
author:lockey
email:lockey@123.com
desc:socket编程客户端,python3.6.2
'''
import socket,time    # 导入 socket 模块

s = socket.socket()   # 创建 socket 对象
host = '127.0.0.1'#socket.gethostname() # 获取本地主机名
port = 9999    # 设置端口好

s.connect((host, port))
while True:
 cmd = input("lockey#")
 #用户输入
 if len(cmd) == 0:continue
 #如果用户未输入内容则继续下一次输入
 s.send(cmd.encode('utf-8'))
 #将用户输入的内容发送给客户端等待结果
 result = s.recv(1024)
 if not result:
 #如果服务端没有返回结果则继续下一次输入
  continue
 print(result.decode('utf-8'))
 #如果服务端有返回则打印结果
s.close()
#用户终止程序时关闭连接

服务器端运行结果

Python网络编程 Python套接字编程

客户端运行截图

Python网络编程 Python套接字编程

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python yield 小结和实例
Apr 25 Python
Pythont特殊语法filter,map,reduce,apply使用方法
Feb 27 Python
python生成圆形图片的方法
Mar 25 Python
python的scikit-learn将特征转成one-hot特征的方法
Jul 10 Python
flask session组件的使用示例
Dec 25 Python
如何在Django配置文件里配置session链接
Aug 06 Python
Python 使用元类type创建类对象常见应用详解
Oct 17 Python
通过celery异步处理一个查询任务的完整代码
Nov 19 Python
使用python 对验证码图片进行降噪处理
Dec 18 Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
Jan 25 Python
matplotlib.pyplot.matshow 矩阵可视化实例
Jun 16 Python
Python中re模块的元字符使用小结
Apr 07 Python
python和ruby,我选谁?
Sep 13 #Python
python实现简单点对点(p2p)聊天
Sep 13 #Python
django 常用orm操作详解
Sep 13 #Python
Python三级菜单的实例
Sep 13 #Python
基于Python代码编辑器的选用(详解)
Sep 13 #Python
python多线程socket编程之多客户端接入
Sep 12 #Python
python数据结构之链表详解
Sep 12 #Python
You might like
eWebEditor v3.8 商业完整版 (PHP)
2006/12/06 PHP
php实现文件下载(支持中文文名)
2013/12/04 PHP
PHP中key和current,next的联合运用实例分析
2016/03/29 PHP
PHP中strpos、strstr和stripos、stristr函数分析
2016/06/11 PHP
PHP数组内存利用率低和弱类型详细解读
2017/08/10 PHP
PHP的PDO大对象(LOBs)
2019/01/27 PHP
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
2015/08/27 Javascript
浅析四种常见的Javascript声明循环变量的书写方式
2015/10/14 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
Vue.js学习之计算属性
2017/01/22 Javascript
jQuery实现按比例缩放图片的方法
2017/04/29 jQuery
Vue实现选择城市功能
2017/05/27 Javascript
Extjs 中的 Treepanel 实现菜单级联选中效果及实例代码
2017/08/22 Javascript
Angular实现的进度条功能示例
2018/02/18 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
Python第三方库的安装方法总结
2016/06/06 Python
Python如何实现文本转语音
2016/08/08 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
python 处理数字,把大于上限的数字置零实现方法
2019/01/28 Python
解决python多行注释引发缩进错误的问题
2019/08/23 Python
Python使用py2neo操作图数据库neo4j的方法详解
2020/01/13 Python
html5本地存储 localStorage操作使用详解
2016/09/20 HTML / CSS
添柏岚英国官方网站:Timberland英国
2019/11/28 全球购物
经济信息管理专业大学生求职信
2013/09/27 职场文书
师范生自荐信范文
2013/10/06 职场文书
工商学院毕业生自荐信
2013/11/12 职场文书
社区创先争优承诺书
2014/08/30 职场文书
合作经营协议书范本
2014/09/16 职场文书
校园安全广播稿范文
2014/09/25 职场文书
2014年幼儿园学期工作总结
2014/12/05 职场文书
朋友离别感言
2015/08/04 职场文书
Java常用工具类汇总 附示例代码
2021/06/26 Java/Android