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字符串转换成浮点数函数分享
Jul 24 Python
python使用MySQLdb访问mysql数据库的方法
Aug 03 Python
浅谈python抛出异常、自定义异常, 传递异常
Jun 20 Python
python字典键值对的添加和遍历方法
Sep 11 Python
Win10下Python环境搭建与配置教程
Nov 18 Python
pyqt5的QWebEngineView 使用模板的方法
Aug 18 Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
Feb 20 Python
详解Python3序列赋值、序列解包
May 14 Python
python将类似json的数据存储到MySQL中的实例
Jul 12 Python
Anconda环境下Vscode安装Python的方法详解
Mar 29 Python
Python json转字典字符方法实例解析
Apr 13 Python
Python如何设置指定窗口为前台活动窗口
Aug 12 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
将数字格式的计算结果转为汉字格式
2006/10/09 PHP
PHP音乐采集(部分代码)
2007/02/14 PHP
PHP XML备份Mysql数据库
2009/05/27 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
2011/04/07 PHP
PHP 图片水印类代码
2012/08/27 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
PHP实现HTTP断点续传的方法
2015/06/17 PHP
Yii实现显示静态页的方法
2016/04/25 PHP
php获取flash尺寸详细数据的方法
2016/11/12 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
2019/07/20 PHP
对textarea框的代码调试,而且功能上使用非常方便,酷
2006/06/30 Javascript
优化网页之快速的呈现我们的网页
2007/06/29 Javascript
分享自己用JS做的扫雷小游戏
2016/02/17 Javascript
利用jQuery中的ajax分页实现代码
2016/02/25 Javascript
jQuery插件实现文字无缝向上滚动效果代码
2016/02/25 Javascript
详解Javascript ES6中的箭头函数(Arrow Functions)
2016/08/24 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
2016/09/26 Javascript
基于JavaScript实现的顺序查找算法示例
2017/04/14 Javascript
浅谈Vue render函数在ElementUi中的应用
2018/09/06 Javascript
详解如何提升JSON.stringify()的性能
2019/06/12 Javascript
js中Function引用类型常见有用的方法和属性详解
2019/12/11 Javascript
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
给Python IDLE加上自动补全和历史功能
2014/11/30 Python
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
Python算法之图的遍历
2017/11/16 Python
Python通过两个dataframe用for循环求笛卡尔积
2020/04/29 Python
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
进修护士自我鉴定
2013/10/14 职场文书
医学专业毕业生个人求职信
2013/12/25 职场文书
接待员岗位责任制
2014/02/10 职场文书
写给女朋友的保证书
2015/05/09 职场文书
签证工作证明模板
2015/06/15 职场文书
大学开学感言
2015/08/01 职场文书
公司业务员管理制度
2015/08/05 职场文书
多属性、多分类MySQL模式设计
2021/04/05 MySQL