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系列之浅谈pickle模块封装和拆封数据对象的方法
May 23 Python
Python编写百度贴吧的简单爬虫
Apr 02 Python
Python的Flask框架中实现简单的登录功能的教程
Apr 20 Python
python3使用scrapy生成csv文件代码示例
Dec 28 Python
python自动化生成IOS的图标
Nov 13 Python
使用python实现语音文件的特征提取方法
Jan 09 Python
python判断无向图环是否存在的示例
Nov 22 Python
python中seaborn包常用图形使用详解
Nov 25 Python
使用matplotlib绘制图例标签中带有公式的图
Dec 13 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
Mar 27 Python
在echarts中图例legend和坐标系grid实现左右布局实例
May 16 Python
tensorflow下的图片标准化函数per_image_standardization用法
Jun 30 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
基于curl数据采集之单页面并行采集函数get_htmls的使用
2013/04/28 PHP
PHP 接入支付宝即时到账功能
2016/09/18 PHP
PHP基于DOMDocument解析和生成xml的方法分析
2017/07/17 PHP
javascript实现动态标签云
2015/10/16 Javascript
vue从使用到源码实现教程详解
2016/09/19 Javascript
使用JS编写的随机抽取号码的小程序
2017/08/11 Javascript
使用nvm管理不同版本的node与npm的方法
2017/10/31 Javascript
vue实现条件判断动态绑定样式的方法
2018/09/29 Javascript
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
Python+MongoDB自增键值的简单实现
2016/11/04 Python
Python中字符串的修改及传参详解
2016/11/30 Python
python编程测试电脑开启最大线程数实例代码
2018/02/09 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
python基础梳理(一)(推荐)
2019/04/06 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
解决Python对齐文本字符串问题
2019/08/28 Python
PYTHON EVAL的用法及注意事项解析
2019/09/06 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
AmazeUI底部导航栏与分享按钮的示例代码
2020/08/18 HTML / CSS
艺术专业大学生自我评价
2013/09/22 职场文书
《赶海》教学反思
2014/04/20 职场文书
五水共治捐款倡议书
2014/05/14 职场文书
公司应聘求职信
2014/06/21 职场文书
2014党的群众路线教育实践活动总结材料
2014/10/31 职场文书
2014年车间主任工作总结
2014/12/10 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
办公室日常管理制度
2015/08/04 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
小学教师教学反思
2016/02/24 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
Java方法重载和方法重写的区别到底在哪?
2021/06/11 Java/Android
dubbo服务整合zipkin详解
2021/07/26 Java/Android
Oracle锁表解决方法的详细记录
2022/06/05 Oracle