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 strip lstrip rstrip使用方法
Sep 06 Python
python获得linux下所有挂载点(mount points)的方法
Apr 29 Python
Python使用回溯法子集树模板解决迷宫问题示例
Sep 01 Python
python+mongodb数据抓取详细介绍
Oct 25 Python
python编程嵌套函数实例代码
Feb 11 Python
python实现感知机线性分类模型示例代码
Jun 02 Python
Django Admin中增加导出CSV功能过程解析
Sep 04 Python
Python csv文件的读写操作实例详解
Nov 19 Python
Python字符串中删除特定字符的方法
Jan 15 Python
Python实现AI自动抠图实例解析
Mar 05 Python
python手机号前7位归属地爬虫代码实例
Mar 31 Python
Spy++的使用方法及下载教程
Jan 29 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实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
学习php中的正则表达式
2014/08/17 PHP
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
PHP实现文件上传和多文件上传
2015/12/24 PHP
PHP实现查询两个数组中不同元素的方法
2016/02/23 PHP
利用php输出不同的心形图案
2016/04/22 PHP
php mysql 封装类实例代码
2016/09/18 PHP
php实现用户登陆简单实例
2017/04/04 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
Google 静态地图API实现代码
2010/11/19 Javascript
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
2013/05/07 Javascript
使用命令对象代替switch语句的写法示例
2015/02/28 Javascript
js实现点击切换TAB标签实例
2015/08/21 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
2017/05/07 Javascript
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
js动态引入的四种方法
2018/05/05 Javascript
zepto.js 实时监听输入框的方法
2018/12/04 Javascript
js实现倒计时秒杀效果
2020/03/25 Javascript
解决vue 给window添加和移除resize事件遇到的坑
2020/07/21 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
浅谈python for循环的巧妙运用(迭代、列表生成式)
2017/09/26 Python
itchat接口使用示例
2017/10/23 Python
python中PS 图像调整算法原理之亮度调整
2019/06/28 Python
python将类似json的数据存储到MySQL中的实例
2019/07/12 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
2019/11/16 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
Farfetch香港官网:汇集全球时尚奢侈品购物平台
2017/11/26 全球购物
2015年妇委会工作总结
2015/05/22 职场文书
七一活动主持词
2015/06/29 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python
浅谈Web Storage API的使用
2021/06/23 Javascript
Nginx利用Logrotate实现日志分割
2022/05/20 Servers