python3实现TCP协议的简单服务器和客户端案例(分享)


Posted in Python onJune 14, 2017

利用python3来实现TCP协议,和UDP类似。UDP应用于及时通信,而TCP协议用来传送文件、命令等操作,因为这些数据不允许丢失,否则会造成文件错误或命令混乱。下面代码就是模拟客户端通过命令行操作服务器。客户端输入命令,服务器执行并且返回结果。

TCP(Transmission Control Protocol 传输控制协议):是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。

TCP客户端

from socket import *

host = '192.168.48.128'
port = 13141
addr = (host,port)
bufsize=1024

tcpClient = socket(AF_INET,SOCK_STREAM) # 这里的参数和UDP不一样。
tcpClient.connect(addr) #由于tcp三次握手机制,需要先连接

while True:
  data = input('>>> ').encode(encoding="utf-8")
  if not data:
    break
  # 数据收发和UDP基本一致
  tcpClient.send(data) 
  data = tcpClient.recv(bufsize).decode(encoding="utf-8") 
  print(data)

tcpClient.close()

TCP客户端

from socket import *
from time import ctime
import os 

host = ''
port = 13140
bufsize = 1024
addr = (host,port)

tcpServer = socket(AF_INET,SOCK_STREAM)
tcpServer.bind(addr)
tcpServer.listen(5) #这里设置监听数为5(默认值),有点类似多线程。

while True:
  print('Waiting for connection...')
  tcpClient,addr = tcpServer.accept() #拿到5个中一个监听的tcp对象和地址
  print('[+]...connected from:',addr)

  while True:
    cmd = tcpClient.recv(bufsize).decode(encoding="utf-8") 
    print('  [-]cmd:',cmd)
    if not cmd:
      break
    ###这里在cmd中执行来自客户端的命令,并且将结果返回###
    cmd = os.popen(cmd) ###os.popen(cmd)对象是file对象子类,所以可以file的方法
    cmdResult = cmd.read()
    cmdStatus = cmd.close()
    #################################################
    data = cmdResult if (not cmdStatus) else "ERROR COMMAND"
    tcpClient.send(data.encode(encoding="utf-8"))

  tcpClient.close() #
  print(addr,'End')
tcpServer.close() #两次关闭,第一次是tcp对象,第二次是tcp服务器

以上这篇python3实现TCP协议的简单服务器和客户端案例(分享)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python函数式编程指南(二):从函数开始
Jun 24 Python
python高阶爬虫实战分析
Jul 29 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
Oct 29 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
May 04 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
Dec 18 Python
关于Python Tkinter Button控件command传参问题的解决方式
Mar 04 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
Apr 24 Python
python函数中将变量名转换成字符串实例
May 11 Python
python3+openCV 获取图片中文本区域的最小外接矩形实例
Jun 02 Python
python--shutil移动文件到另一个路径的操作
Jul 13 Python
Python txt文件如何转换成字典
Nov 03 Python
详解Python openpyxl库的基本应用
Feb 26 Python
Python之re操作方法(详解)
Jun 14 #Python
Python之py2exe打包工具详解
Jun 14 #Python
使用XML库的方式,实现RPC通信的方法(推荐)
Jun 14 #Python
python实现单线程多任务非阻塞TCP服务端
Jun 13 #Python
Python实现的下载网页源码功能示例
Jun 13 #Python
Python爬虫DOTA排行榜爬取实例(分享)
Jun 13 #Python
老生常谈python之鸭子类和多态
Jun 13 #Python
You might like
社区(php&&mysql)三
2006/10/09 PHP
Zend的MVC机制使用分析(一)
2013/05/02 PHP
深入解析fsockopen与pfsockopen的区别
2013/07/05 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
2014/03/18 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
jQuery技巧大放送 学习jquery的朋友可以看下
2009/10/14 Javascript
jquery tablesorter.js 支持中文表格排序改进
2009/12/09 Javascript
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
js遍历、动态的添加数据的小例子
2013/06/22 Javascript
js css后面所带参数含义介绍
2013/08/18 Javascript
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
bootstrap改变按钮加载状态
2014/12/01 Javascript
12行javascript代码绘制一个八卦图
2015/04/02 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
JS数组array元素的添加和删除方法代码实例
2015/06/01 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
基于jQuery的左滑出现删除按钮的示例
2017/08/29 jQuery
JavaScript模拟实现封装的三种方式及写法区别
2017/10/27 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
js实现贪吃蛇游戏(简易版)
2020/09/29 Javascript
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
Python环境搭建之OpenCV的步骤方法
2017/10/20 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
python中提高pip install速度
2020/02/14 Python
python自动打开浏览器下载zip并提取内容写入excel
2021/01/04 Python
Anthropologie英国:美国家喻户晓的休闲服装和家居产品品牌
2018/12/05 全球购物
美国浴缸、水槽和水龙头购物网站:Vintage Tub & Bath
2019/11/05 全球购物
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
有限责任公司股东合作协议书
2014/12/02 职场文书
2014年科研工作总结
2014/12/03 职场文书
六一儿童节开幕词
2015/01/29 职场文书
辞职信怎么写
2015/02/27 职场文书
环境卫生整治简报
2015/07/20 职场文书
导游词之南京中山陵
2019/11/27 职场文书