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中使用M2Crypto模块实现AES加密的教程
Apr 08 Python
python实现点对点聊天程序
Jul 28 Python
python3利用tcp实现文件夹远程传输
Jul 28 Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 Python
python使用requests.session模拟登录
Aug 09 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
Dec 12 Python
Python3直接爬取图片URL并保存示例
Dec 18 Python
pandas-resample按时间聚合实例
Dec 27 Python
Python描述符descriptor使用原理解析
Mar 21 Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
Nov 24 Python
python 简单的调用有道翻译
Nov 25 Python
python日志通过不同的等级打印不同的颜色(示例代码)
Jan 13 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 echo,print,printf,sprintf函数之间的区别与用法详解
2013/11/27 PHP
php中eval函数的危害与正确禁用方法
2014/06/30 PHP
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
精心挑选的15个jQuery下拉菜单制作教程
2012/06/15 Javascript
js call方法详细介绍(js 的继承)
2013/11/18 Javascript
子页向父页传值示例
2013/11/27 Javascript
JQuery获取表格数据示例代码
2014/05/26 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
javascript实现网页端解压并查看zip文件
2015/12/15 Javascript
JavaScript电子时钟倒计时第二款
2016/01/10 Javascript
jQuery实现手机自定义弹出输入框
2016/06/13 Javascript
Nodejs中 npm常用命令详解
2016/07/04 NodeJs
JavaScript实现QQ聊天消息展示和评论提交功能
2017/05/22 Javascript
基于angular2 的 http服务封装的实例代码
2017/06/29 Javascript
AngularJS实时获取并显示密码的方法
2018/02/06 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
2019/01/06 Javascript
javascript头像上传代码实例
2019/09/28 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
python判断字符串是否纯数字的方法
2014/11/19 Python
python实现实时监控文件的方法
2016/08/26 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
2018/04/18 Python
Python实现FTP文件传输的实例
2019/07/07 Python
Python3 列表,数组,矩阵的相互转换的方法示例
2019/08/05 Python
使用tensorflow DataSet实现高效加载变长文本输入
2020/01/20 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
2020/08/26 Python
Python测试框架:pytest学习笔记
2020/10/20 Python
python爬虫scrapy图书分类实例讲解
2020/11/23 Python
使用CSS3实现SVG路径描边动画效果入门教程
2019/10/21 HTML / CSS
市场部规章制度
2014/01/24 职场文书
个人近期表现材料
2014/02/11 职场文书
数学系毕业生求职信
2014/05/29 职场文书
学校安全管理制度
2015/08/06 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
js之ajax文件上传
2021/05/13 Javascript