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 相关文章推荐
pandas数值计算与排序方法
Apr 12 Python
Python爬虫框架scrapy实现的文件下载功能示例
Aug 04 Python
python数据结构学习之实现线性表的顺序
Sep 28 Python
Python实现字典按key或者value进行排序操作示例【sorted】
May 03 Python
python 多线程对post请求服务器测试并发的方法
Jun 13 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
Aug 12 Python
python 多维高斯分布数据生成方式
Dec 09 Python
python如何基于redis实现ip代理池
Jan 17 Python
20行Python代码实现视频字符化功能
Apr 13 Python
Mysql数据库反向生成Django里面的models指令方式
May 18 Python
pytorch 6 batch_train 批训练操作
May 28 Python
python运算符之与用户交互
Apr 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中反射的应用
2016/03/15 PHP
PHP+JS实现的实时搜索提示功能
2018/03/13 PHP
jquery tab标签页的制作
2010/05/10 Javascript
统计出现最多的字符次数的js代码
2010/12/03 Javascript
js arguments对象应用介绍
2012/11/28 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
JS判定是否原生方法
2013/07/22 Javascript
jquery禁止输入数字以外的字符的示例(纯数字验证码)
2014/04/10 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
JS制作适用于手机和电脑的通知信息效果
2016/10/28 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
2017/04/12 Javascript
基于 webpack2 实现的多入口项目脚手架详解
2017/06/26 Javascript
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
JavaScript中的高级函数
2018/01/04 Javascript
js字符串类型String常用操作实例总结
2019/07/05 Javascript
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
python利用hook技术破解https的实例代码
2013/03/25 Python
python中使用序列的方法
2015/08/03 Python
Python中的__slots__示例详解
2017/07/06 Python
pandas 转换成行列表进行读取与Nan处理的方法
2018/10/30 Python
解决django中form表单设置action后无法回到原页面的问题
2020/03/13 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
css3 iphone玻璃透明气泡完美实现
2013/03/20 HTML / CSS
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
美国综合购物商城:UnbeatableSale.com
2018/11/28 全球购物
英国银首饰公司:e&e Jewellery
2021/02/11 全球购物
EMPHASIS艾斐诗官网:周生生旗下原创精品珠宝品牌
2020/12/17 全球购物
经理秘书找工作求职信
2013/12/19 职场文书
贫困生证明范文
2015/06/16 职场文书
幼儿园小班开学寄语(2016秋季)
2015/12/03 职场文书
教育教学工作反思
2016/02/24 职场文书
游戏《我的世界》澄清Xbox版暂无计划加入光追
2022/04/03 其他游戏
开发者首先否认《遗弃》被取消的传言
2022/04/11 其他游戏