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实现带声音的摩斯码翻译实现方法
May 20 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
Apr 11 Python
python 日志增量抓取实现方法
Apr 28 Python
对Python使用mfcc的两种方式详解
Jan 09 Python
Python实现网站表单提交和模板
Jan 15 Python
如何用Python来搭建一个简单的推荐系统
Aug 07 Python
解决Python使用列表副本的问题
Dec 19 Python
Python利用全连接神经网络求解MNIST问题详解
Jan 14 Python
使用Python求解带约束的最优化问题详解
Feb 11 Python
Python图像处理库PIL的ImageDraw模块介绍详解
Feb 26 Python
Python pandas 列转行操作详解(类似hive中explode方法)
May 18 Python
Python如何向SQLServer存储二进制图片
Jun 08 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 无限级缓存的类的扩展
2009/03/16 PHP
php开发环境配置记录
2011/01/14 PHP
如何在symfony中导出为CSV文件中的数据
2011/10/06 PHP
Yii中CGridView关联表搜索排序方法实例详解
2014/12/03 PHP
深入分析PHP优化及注意事项
2016/07/04 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
2016/12/15 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
html5 canvas js(数字时钟)实例代码
2013/12/23 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
2016/08/25 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
修改vue+webpack run build的路径方法
2018/09/01 Javascript
基于vue-router 多级路由redirect 重定向的问题
2018/09/03 Javascript
通过GASP让vue实现动态效果实例代码详解
2019/11/24 Javascript
Javascript地址引用代码实例解析
2020/02/25 Javascript
Python中index()和seek()的用法(详解)
2017/04/27 Python
Python爬虫实现百度图片自动下载
2018/02/04 Python
spark: RDD与DataFrame之间的相互转换方法
2018/06/07 Python
10招!看骨灰级Pythoner玩转Python的方法
2019/04/15 Python
python psutil模块使用方法解析
2019/08/01 Python
使用python和pygame制作挡板弹球游戏
2019/12/03 Python
突袭HTML5之Javascript API扩展3—本地存储全新体验
2013/01/31 HTML / CSS
检测浏览器是否支持html5视频的代码
2013/03/28 HTML / CSS
戴尔英国官网:Dell英国
2017/05/27 全球购物
Zooplus葡萄牙:欧洲领先的网上宠物商店
2018/07/01 全球购物
精细化工应届生求职信
2013/11/17 职场文书
关于是否需要写商业计划书
2014/02/07 职场文书
年级组长自我鉴定
2014/02/22 职场文书
大跃进口号
2014/06/16 职场文书
施工安全协议书范本
2014/09/26 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书
字典算法实现及操作 --python(实用)
2021/03/31 Python
详解Node.js如何处理ES6模块
2021/05/15 Javascript