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过滤函数filter()使用自定义函数过滤序列实例
Aug 26 Python
用Python进行TCP网络编程的教程
Apr 29 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
Dec 31 Python
python里使用正则的findall函数的实例详解
Oct 19 Python
在CentOS6上安装Python2.7的解决方法
Jan 09 Python
python中将字典形式的数据循环插入Excel
Jan 16 Python
Python检查和同步本地时间(北京时间)的实现方法
Dec 03 Python
python接口自动化(十六)--参数关联接口后传(详解)
Apr 16 Python
TensorFlow实现指数衰减学习率的方法
Feb 05 Python
Python实现GIF图倒放
Jul 16 Python
pytorch实现线性回归以及多元回归
Apr 11 Python
python blinker 信号库
May 04 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
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
php使用curl存储cookie的示例
2014/03/31 PHP
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
2008/09/26 Javascript
JavaScript基础知识之数据类型
2012/08/06 Javascript
javaScript使用EL表达式的几种方式
2014/05/27 Javascript
javascript实现日期按月份加减
2015/05/15 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
2016/02/18 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
jQuery事件绑定用法详解
2016/09/08 Javascript
利用transition实现文字上下抖动的效果
2017/01/21 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
JavaScript 中使用 Generator的方法
2017/12/29 Javascript
JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
2018/12/14 Javascript
浅谈js中的attributes和Attribute的用法与区别
2020/07/16 Javascript
jquery实现拖拽小方块效果
2020/12/10 jQuery
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
python获取本机mac地址和ip地址的方法
2015/04/29 Python
Python中http请求方法库汇总
2016/01/06 Python
python实现简易数码时钟
2021/02/19 Python
python实现祝福弹窗效果
2019/04/07 Python
python实现按行分割文件
2019/07/22 Python
python中xlrd模块的使用详解
2021/02/01 Python
IE8下CSS3选择器nth-child() 不兼容问题的解决方法
2016/11/16 HTML / CSS
html5 web本地存储将取代我们的cookie
2012/12/26 HTML / CSS
HTML5 语音搜索只需一句代码
2013/01/03 HTML / CSS
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
企业总经理助理岗位职责
2014/09/12 职场文书
小学“向国旗敬礼”网上签名寄语活动总结
2014/09/27 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
幸福终点站观后感
2015/06/04 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书
python四个坐标点对图片区域最小外接矩形进行裁剪
2021/06/04 Python
用JS实现飞机大战小游戏
2021/06/09 Javascript
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python