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 cookbook(数据结构与算法)根据字段将记录分组操作示例
Mar 19 Python
python+opencv识别图片中的圆形
Mar 25 Python
PyTorch CNN实战之MNIST手写数字识别示例
May 29 Python
python爬虫项目设置一个中断重连的程序的实现
Jul 26 Python
Python爬虫 批量爬取下载抖音视频代码实例
Aug 16 Python
python+jinja2实现接口数据批量生成工具
Aug 28 Python
python中数据库like模糊查询方式
Mar 02 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
Aug 17 Python
Python HTMLTestRunner如何下载生成报告
Sep 04 Python
Python中lru_cache的使用和实现详解
Jan 25 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
Feb 20 Python
Pytorch GPU内存占用很高,但是利用率很低如何解决
Jun 01 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 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
php递归实现无限分类生成下拉列表的函数
2010/08/08 PHP
php中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
php5.3 注意事项说明
2013/07/01 PHP
微信自定义菜单的处理开发示例
2015/04/16 PHP
JSON JQUERY模板实现说明
2010/07/03 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
html5+javascript制作简易画板附图
2014/04/25 Javascript
跟我学习javascript的定时器
2015/11/19 Javascript
分享Javascript实用方法二
2015/12/13 Javascript
详解React-Todos入门例子
2016/11/08 Javascript
javascript动画之磁性吸附效果篇
2016/12/09 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
js仿微信公众平台打标签功能
2017/04/08 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
JavaScript中附件预览功能实现详解(推荐)
2017/08/15 Javascript
Vue 前端实现登陆拦截及axios 拦截器的使用
2019/07/17 Javascript
Layui点击图片弹框预览的实现方法
2019/09/16 Javascript
[02:55]含熏伴清风,风行者至宝、屠夫身心及典藏宝瓶二展示
2020/09/08 DOTA
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
更改Ubuntu默认python版本的两种方法python-> Anaconda
2016/12/18 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
python实现停车管理系统
2018/11/30 Python
解决Python plt.savefig 保存图片时一片空白的问题
2019/01/10 Python
Python3使用Matplotlib 绘制精美的数学函数图形
2019/04/11 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
2019/05/10 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
2020/03/09 Python
Python命令行参数argv和argparse该如何使用
2021/02/08 Python
2014学雷锋活动心得体会
2014/03/10 职场文书
协议书与合同的区别
2014/04/18 职场文书
施工工地安全标语
2014/06/07 职场文书
学校社团活动总结
2015/05/07 职场文书
工作汇报材料难写?方法都在这里了!
2019/07/01 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书
SpringBoot Http远程调用的方法
2022/08/14 Java/Android