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实现的一个简单LRU cache
Sep 26 Python
基于wxpython开发的简单gui计算器实例
May 30 Python
windows下Python实现将pdf文件转化为png格式图片的方法
Jul 21 Python
tensorflow实现KNN识别MNIST
Mar 12 Python
python安装twisted的问题解析
Aug 21 Python
使用Python检测文章抄袭及去重算法原理解析
Jun 14 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
Aug 22 Python
Python上下文管理器用法及实例解析
Nov 11 Python
Python批量启动多线程代码实例
Feb 18 Python
用什么库写 Python 命令行程序(示例代码详解)
Feb 20 Python
Django自带用户认证系统使用方法解析
Nov 12 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
Dec 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
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
php网站来路获取代码(针对搜索引擎)
2010/06/08 PHP
php获取$_POST同名参数数组的实现介绍
2013/06/30 PHP
PHP静态文件生成类实例
2014/11/29 PHP
文本框的字数限制功能jquery插件
2009/11/24 Javascript
网络图片延迟加载实现代码 超越jquery控件
2010/03/27 Javascript
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
JQuery优缺点分析说明
2011/04/10 Javascript
JQuery 中几个类选择器的简单使用介绍
2013/03/14 Javascript
14款NodeJS Web框架推荐
2014/07/11 NodeJs
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
AngularJs 禁止模板缓存的方法
2017/11/28 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
详解Vue数据驱动原理
2020/11/17 Javascript
[33:09]完美世界DOTA2联赛循环赛 Forest vs DM BO2第二场 10.29
2020/10/29 DOTA
python中sleep函数用法实例分析
2015/04/29 Python
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
python实现图书管理系统
2018/03/12 Python
使用python 3实现发送邮件功能
2018/06/15 Python
python利用requests库进行接口测试的方法详解
2018/07/06 Python
tensorflow: variable的值与variable.read_value()的值区别详解
2018/07/30 Python
浅析Python函数式编程
2018/10/06 Python
Python 实现OpenCV格式和PIL.Image格式互转
2020/01/09 Python
python处理RSTP视频流过程解析
2020/01/11 Python
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
孤独星球出版物:Lonely Planet Publications
2018/03/17 全球购物
反四风对照检查材料思想汇报
2014/09/16 职场文书
2014年污水处理厂工作总结
2014/12/19 职场文书
父亲婚礼答谢词
2015/01/04 职场文书
大学班长竞选稿
2015/11/20 职场文书