python 基于TCP协议的套接字编程详解


Posted in Python onJune 29, 2019

基于TCP协议的套接字编程

实现电话沟通为例,这里传递的是字符,可以自己尝试去发送一个文件

# 服务端
import socket
# 1. 符合TCP协议的手机
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # TCP
# 2. 绑定手机号 一个服务器,我们自己的电脑作为服务器的话,用自己的IP地址
server.bind(('127.0.0.1',8000)) # 127.0.0.1 代表本地
# server.bind(('192.168.11.251',8000)) 
server.listen(5) # 半连接池 可以同时接收5个客户端
# 3. 等待客户端连接
print('start...')
# 链接循环
while True:
# 通信循环
conn,client_addr = server.accept()
while True:
try:
# 4. 收到信息 receive
data = conn.recv(1024) # 每次接收多少字节,如果改为10,客户端输入dir,(可以在cmd中输入 dir,看看会得到什么) ,会出现什么情况呢,下次的博客会讲到粘包问题,以及如何处理粘包问题
print(data)
# 5. 回消息
conn.send(data.upper())
except ConnectionAbortedError:
continue
except ConnectionResetError:
break
# 客户端1
import socket
# 1. 创建符合TCP协议的手机
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 2. 拨号
client.connect(('127.0.0.1',8000))
while True:
msg = input('please enter your msg') # dir
# 3. 发送消息
client.send(msg.encode('utf8'))
# 4. 接收消息
data = client.recv(1024)
print(data)
# 客户端2
import socket
# 1. 创建符合TCP协议的手机
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 2. 拨号
client.connect(('127.0.0.1',8000))
# msg = input('please enter your msg>>>')
# 3. 发送消息
client.send('hello'.encode('utf8'))
client.send('world'.encode('utf8'))
# 4. 接收信息
data = client.recv(1024)
print(data)

模拟ssh远程执行命令(linux系统)

# ssh服务端
import socket
import subprocess
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(('192.168.11.251',8000)) # 这是我的机子,客户端可以是其他人的机子
server.listen(5)
print('start...')
while True:
conn,cient_addr = server.accept()
print(client_addr) # 打印出的是其他人机子的IP
while True:
try:
cmd = conn.recv(1024) # dir
print(cmd)
# 帮你执行cmd命令,然后把执行结果保存到管道里
pipeline = subprocess.Popen(cmd.decode('utf8'),
shell = True,
stderr = subprocess.PIPE, # std 标准
stdout = subprocess.PIPE)
stderr = pipeline.stderr.read()
stdout = pipeline.stdout.read()
conn.send(stderr)
conn.send(stdout)
except ConnectionResetError:
break
# ssh客户端
import socket
# 1.创建符合TCP协议的手机
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 2. 拨号
client.connect(('192.168.11.210',8000))
while True:
msg = input('please enter your msg') # dir
# 3. 发送消息
client.send(msg.encode('utf8'))
# 4. 接收消息
data = client.recv(10)
print(data.decode('gbk')) # 在mac电脑上可能是'utf8'

学习最有效的方法一定是有输入,一定要输出,这样学的东西才能真正得有用

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中unittest用法实例
Sep 25 Python
python抓取最新博客内容并生成Rss
May 17 Python
Python函数返回值实例分析
Jun 08 Python
Python字典实现简单的三级菜单(实例讲解)
Jul 31 Python
python基于ID3思想的决策树
Jan 03 Python
全面了解Nginx, WSGI, Flask之间的关系
Jan 09 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
Jul 18 Python
python得到电脑的开机时间方法
Oct 15 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
Oct 28 Python
关于Pytorch MaxUnpool2d中size操作方式
Jan 03 Python
Python实现密钥密码(加解密)实例详解
Apr 26 Python
python基于win32api实现键盘输入
Dec 09 Python
Python进阶:生成器 懒人版本的迭代器详解
Jun 29 #Python
简单了解Python matplotlib线的属性
Jun 29 #Python
Jacobi迭代算法的Python实现详解
Jun 29 #Python
Gauss-Seidel迭代算法的Python实现详解
Jun 29 #Python
python异步实现定时任务和周期任务的方法
Jun 29 #Python
python循环定时中断执行某一段程序的实例
Jun 29 #Python
python顺序执行多个py文件的方法
Jun 29 #Python
You might like
解析PHP高效率写法(详解原因)
2013/06/20 PHP
php使用Session和文件统计在线人数
2015/07/04 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
php简单解析mysqli查询结果的方法(2种方法)
2016/06/29 PHP
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
2008/11/06 Javascript
Javascript Object.extend
2010/05/18 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
浏览器兼容的JS写法总结
2016/04/27 Javascript
JSON 的正确用法探讨:Pyhong、MongoDB、JavaScript与Ajax
2016/05/15 Javascript
JQuery 设置checkbox值二次无效的解决方法
2016/07/22 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
2017/07/12 jQuery
js实现轮播图的完整代码
2020/10/26 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
Vue中关闭弹窗组件时销毁并隐藏操作
2020/09/01 Javascript
[06:21]完美世界亚洲区首席发行官竺琦TI3采访
2013/08/26 DOTA
用python实现的去除win下文本文件头部BOM的代码
2013/02/10 Python
python实现系统状态监测和故障转移实例方法
2013/11/18 Python
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
浅析Python中return和finally共同挖的坑
2017/08/18 Python
Python实现对一个函数应用多个装饰器的方法示例
2018/02/09 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
Kali Linux安装ipython2 和 ipython3的方法
2019/07/11 Python
利用Python代码实现一键抠背景功能
2019/12/29 Python
Python处理PDF与CDF实例
2020/02/26 Python
html5 canvas移动浏览器上实现图片压缩上传
2016/03/11 HTML / CSS
来自南加州灵感的工作和娱乐服装:TravisMathew
2019/05/01 全球购物
维多利亚的秘密阿联酋官网:Victoria’s Secret阿联酋
2019/12/07 全球购物
学期自我鉴定
2013/11/04 职场文书
经典优秀毕业生求职信范文分享
2013/12/18 职场文书
写给女生的道歉信
2014/01/08 职场文书
小学生竞选班长演讲稿
2014/04/24 职场文书
弘扬民族精神演讲稿
2014/05/07 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
Java8中接口的新特性使用指南
2021/11/01 Java/Android