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文本特征抽取与向量化算法学习
Dec 22 Python
200 行python 代码实现 2048 游戏
Jan 12 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
Feb 01 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
Jan 29 Python
Python线上环境使用日志的及配置文件
Jul 28 Python
浅谈django2.0 ForeignKey参数的变化
Aug 06 Python
python 数据提取及拆分的实现代码
Aug 26 Python
python利用openpyxl拆分多个工作表的工作簿的方法
Sep 27 Python
python 实用工具状态机transitions
Nov 21 Python
python中添加模块导入路径的方法
Feb 03 Python
python wsgiref源码解析
Feb 06 Python
Opencv 图片的OCR识别的实战示例
Mar 02 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你的验证码安全码?
2007/01/02 PHP
mysql下创建字段并设置主键的php代码
2010/05/16 PHP
PHP获取windows登录用户名的方法
2014/06/24 PHP
Yii实现多数据库主从读写分离的方法
2014/12/29 PHP
PHP会话处理的10个函数
2015/08/11 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
JCalendar 日历控件 v1.0 beta[兼容IE&Firefox] 有文档和例子
2007/05/30 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
javascript中if和switch,==和===详解
2015/07/30 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
JavaScript数据存储 Cookie篇
2016/07/02 Javascript
仿百度换肤功能的简单实例代码
2016/07/11 Javascript
最棒的Angular2表格控件
2016/08/10 Javascript
浅谈angular懒加载的一些坑
2016/08/20 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
原生javascript移动端滑动banner效果
2017/03/10 Javascript
javascript原生封装一个淡入淡出效果的函数测试实例代码
2018/03/19 Javascript
Javascript中绑定click事件的四种方式介绍
2018/10/26 Javascript
Python爬虫实例扒取2345天气预报
2018/03/04 Python
利用Python代码实现数据可视化的5种方法详解
2018/03/25 Python
python实现飞机大战微信小游戏
2020/03/21 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
2019/08/18 Python
用python制作个视频下载器
2021/02/01 Python
HTML5 拖放(Drag 和 Drop)详解与实例代码
2017/09/14 HTML / CSS
伦敦所有西区剧院演出官方票务代理:Theatre Tickets Direct
2017/05/26 全球购物
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
介绍一下UNIX启动过程
2013/11/14 面试题
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
领导干部廉政自律承诺书
2014/05/26 职场文书
省级优秀毕业生主要事迹
2014/05/29 职场文书
校庆标语集锦
2014/06/25 职场文书
三方股东合作协议书
2014/10/28 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
行为规范主题班会
2015/08/13 职场文书
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android
Nginx图片服务器配置之后图片访问404的问题解决
2022/03/21 Servers