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最基本的数据类型以及对元组的介绍
Apr 14 Python
Python中处理字符串之endswith()方法的使用简介
May 18 Python
Python实现找出数组中第2大数字的方法示例
Mar 26 Python
详解Python下ftp上传文件linux服务器
Jun 21 Python
解决Python下imread,imwrite不支持中文的问题
Dec 05 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
关于Python3 类方法、静态方法新解
Aug 30 Python
Python调用scp向服务器上传文件示例
Dec 22 Python
Python图像阈值化处理及算法比对实例解析
Jun 19 Python
python爬取股票最新数据并用excel绘制树状图的示例
Mar 01 Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 Python
Python下opencv使用hough变换检测直线与圆
Jun 18 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获取YouTube视频信息的方法
2015/02/11 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
Javascript表单验证要注意的事项
2014/09/29 Javascript
javascript实现简单的页面右下角提示信息框
2015/07/31 Javascript
css如何让浮动元素水平居中
2015/08/07 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
vue 根据数组中某一项的值进行排序的方法
2018/08/30 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
Element Popover 弹出框的使用示例
2020/07/26 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
Python编写的com组件发生R6034错误的原因与解决办法
2013/04/01 Python
Python简单进程锁代码实例
2015/04/27 Python
Python实现身份证号码解析
2015/09/01 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
2017/10/11 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
使用pyqt 实现重复打开多个相同界面
2019/12/13 Python
python实现监控阿里云账户余额功能
2019/12/16 Python
详解Python中pyautogui库的最全使用方法
2020/04/01 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
Python3 搭建Qt5 环境的方法示例
2020/07/16 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
兰蔻俄罗斯官方网站:Lancome俄罗斯
2019/12/09 全球购物
Oracle中delete,truncate和drop的区别
2016/05/05 面试题
小车司机岗位职责
2013/11/25 职场文书
团队精神演讲稿
2013/12/31 职场文书
经济管理专业毕业生自荐信范文
2014/01/02 职场文书
班委竞选演讲稿
2014/04/28 职场文书
安全环保演讲稿
2014/08/28 职场文书
党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
汽车机电维修工求职信
2014/09/30 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
2015年学生资助工作总结
2015/05/25 职场文书
windows系统安装配置nginx环境
2022/06/28 Servers