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中的进程分支fork和exec详解
Apr 11 Python
Python中文件操作简明介绍
Apr 13 Python
Python实现句子翻译功能
Nov 14 Python
Django实现简单分页功能的方法详解
Dec 05 Python
Python numpy 常用函数总结
Dec 07 Python
python使用pandas实现数据分割实例代码
Jan 25 Python
Python实现的批量修改文件后缀名操作示例
Dec 07 Python
python 通过可变参数计算n个数的乘积方法
Jun 13 Python
Django的models中on_delete参数详解
Jul 16 Python
PyQtGraph在pyqt中的应用及安装过程
Aug 04 Python
python里glob模块知识点总结
Jan 05 Python
python数据可视化JupyterLab实用扩展程序Mito
Nov 20 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
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
PHP基于面向对象实现的留言本功能实例
2018/04/04 PHP
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
JavaScript去掉空格的方法集合
2010/12/28 Javascript
javascript实现存储hmtl字符串示例
2014/04/25 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
JavaScript实战之带收放动画效果的导航菜单
2016/08/16 Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
2016/11/29 Javascript
微信小程序 picker 组件详解及简单实例
2017/01/10 Javascript
JS实现浏览器打印、打印预览示例
2017/02/28 Javascript
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
angularjs封装$http为factory的方法
2017/05/18 Javascript
javascript实现循环广告条效果
2017/12/12 Javascript
浅析vue-router jquery和params传参(接收参数)$router $route的区别
2018/08/03 jQuery
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
2016/06/13 Python
tensorflow训练中出现nan问题的解决
2018/02/10 Python
Python实现输出某区间范围内全部素数的方法
2018/05/02 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
2019/12/31 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
pip安装tensorflow的坑的解决
2020/04/19 Python
python的dict判断key是否存在的方法
2020/12/09 Python
Python 多进程原理及实现
2020/12/21 Python
如何写一个Java类既可以用作applet也可以用作java应用
2016/01/18 面试题
医学生实习自我鉴定
2013/09/27 职场文书
本科毕业生自荐信
2014/06/02 职场文书
放飞理想演讲稿
2014/09/09 职场文书
党的群众路线教育实践活动个人对照检查材料范文
2014/09/25 职场文书
2014年工程师工作总结
2014/11/25 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
2015年幼师个人工作总结
2015/10/15 职场文书
Redis Cluster 集群搭建你会吗
2021/08/04 Redis
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android
ubuntu开机后ROS程序自启动问题
2022/12/24 Servers