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实现保存网页到本地示例
Mar 16 Python
关于python的list相关知识(推荐)
Aug 30 Python
Python 加密的实例详解
Oct 09 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
Jun 05 Python
python利用requests库进行接口测试的方法详解
Jul 06 Python
python 实现UTC时间加减的方法
Dec 31 Python
python简单鼠标自动点击某区域的实例
Jun 25 Python
Python帮你识破双11的套路
Nov 11 Python
Python实现图片添加文字
Nov 26 Python
Python函数的迭代器与生成器的示例代码
Jun 18 Python
python上下文管理器异常问题解决方法
Feb 07 Python
Python实现位图分割的效果
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
PHP两种去掉数组重复值的方法比较
2014/06/19 PHP
php获取指定范围内最接近数的方法
2015/06/02 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
laravel validate 设置为中文的例子(验证提示为中文)
2019/09/29 PHP
jQuery 获取对象 定位子对象
2010/05/31 Javascript
js操作select控件的几种方法
2010/06/02 Javascript
JSChart轻量级图形报表工具(内置函数中文参考)
2010/10/11 Javascript
extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
2013/04/02 Javascript
jQuery源码分析之jQuery中的循环技巧详解
2014/09/06 Javascript
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
Javascript的闭包详解
2014/12/26 Javascript
js淡入淡出焦点图幻灯片效果代码分享
2015/09/08 Javascript
Javascript实现单例模式
2016/01/24 Javascript
对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解
2016/04/11 Javascript
JS在if中的强制类型转换方式
2018/07/15 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
2019/09/11 Javascript
在Webpack中用url-loader处理图片和字体的问题
2020/04/28 Javascript
vue element el-transfer增加拖拽功能
2021/01/15 Vue.js
[02:36]DOTA2混沌骑士 英雄基础教程
2013/11/26 DOTA
Python基于pygame实现的font游戏字体(附源码)
2015/11/11 Python
Python 实现随机数详解及实例代码
2017/04/15 Python
Python编程之string相关操作实例详解
2017/07/22 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
解决python打不开文件(文件不存在)的问题
2019/02/18 Python
六种酷炫Python运行进度条效果的实现代码
2020/07/17 Python
python math模块的基本使用教程
2021/01/16 Python
北美个性化礼品商店:Things Remembered
2018/06/12 全球购物
单身申明具结书
2015/02/26 职场文书
奔腾年代观后感
2015/06/09 职场文书
2016大学生社会实践心得体会范文
2016/01/14 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
聊一聊python常用的编程模块
2021/05/14 Python
mybatis-plus模糊查询指定字段
2022/04/28 Java/Android