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实现识别相似图片小结
Feb 22 Python
python Matplotlib画图之调整字体大小的示例
Nov 20 Python
关于Python正则表达式 findall函数问题详解
Mar 22 Python
python调用OpenCV实现人脸识别功能
May 25 Python
Tensorflow使用tfrecord输入数据格式
Jun 19 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
浅谈django的render函数的参数问题
Oct 16 Python
Python 利用切片从列表中取出一部分使用的方法
Feb 01 Python
Python多进程编程常用方法解析
Mar 26 Python
详解pycharm配置python解释器的问题
Oct 15 Python
Python文件名匹配与文件复制的实现
Dec 11 Python
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
Jun 11 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
php生成EXCEL的东东
2006/10/09 PHP
PHP JSON 数据解析代码
2010/05/26 PHP
PHP对象相互引用的内存溢出实例分析
2014/08/28 PHP
PHP+jQuery翻板抽奖功能实现
2015/10/19 PHP
php连接微软MSSQL(sql server)完全攻略
2016/11/27 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
jquery each的几种常用的使用方法示例
2014/01/21 Javascript
javascript实现的一个随机点名功能
2014/08/26 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
2015/08/20 Javascript
javascript实现3D切换焦点图
2015/10/16 Javascript
javascript返回顶部的按钮实现方法
2016/01/09 Javascript
JavaScript Array对象详解
2016/03/01 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
[03:39]2015国际邀请赛主赛事首日精彩回顾
2015/08/05 DOTA
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python实现读取txt文件中的数据并绘制出图形操作示例
2019/02/26 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
2019/08/17 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
如何在Python对Excel进行读取
2020/06/04 Python
Django-imagekit的使用详解
2020/07/06 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
HTML5超文本标记语言的实现方法
2020/09/24 HTML / CSS
Daisy London官网:英国最大的首饰集团IBB旗下
2019/02/28 全球购物
Helly Hansen工作服美国官方网上商店:为最恶劣的环境
2019/09/04 全球购物
.NET常见笔试题集
2012/12/01 面试题
在职研究生自我鉴定
2013/10/16 职场文书
探亲邀请信范文
2014/01/30 职场文书
推荐信怎么写
2014/05/09 职场文书
三严三实学习心得体会
2014/10/13 职场文书
保护环境建议书作文400字
2015/09/14 职场文书