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中操作时间之mktime()方法的使用教程
May 22 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
Jul 06 Python
python实现三维拟合的方法
Dec 29 Python
Django如何防止定时任务并发浅析
May 14 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
Aug 12 Python
python调用matplotlib模块绘制柱状图
Oct 18 Python
Python 获取命令行参数内容及参数个数的实例
Dec 20 Python
Python 写了个新型冠状病毒疫情传播模拟程序
Feb 14 Python
Python Selenium 设置元素等待的三种方式
Mar 18 Python
如何写python的配置文件
Jun 07 Python
Python自动化爬取天眼查数据的实现
Jun 15 Python
python和anaconda的区别
May 06 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
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
PHP mb_convert_encoding 获取字符串编码类型实现代码
2009/04/26 PHP
PHP 使用memcached简单示例分享
2015/03/05 PHP
php实现微信发红包
2015/12/05 PHP
innerText和innerHTML 一些问题分析
2009/05/18 Javascript
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
javascript制作2048游戏
2015/03/30 Javascript
jQuery实现的在线答题功能
2015/04/12 Javascript
javascript实现验证身份证号的有效性并提示
2015/04/30 Javascript
JavaScript实现数组随机排序的方法
2015/06/26 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
2017/01/13 Javascript
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
node前端模板引擎Jade之标签的基本写法
2018/05/11 Javascript
JavaScript解析机制与闭包原理实例详解
2019/03/08 Javascript
微信小程序生成分享海报方法(附带二维码生成)
2019/03/29 Javascript
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
Python抓取Discuz!用户名脚本代码
2013/12/30 Python
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
Python3实现从排序数组中删除重复项算法分析
2019/04/03 Python
python将类似json的数据存储到MySQL中的实例
2019/07/12 Python
python按键按住不放持续响应的实例代码
2019/07/17 Python
Python字符编码转码之GBK,UTF8互转
2020/02/09 Python
利用canvas实现图片压缩的示例代码
2018/07/17 HTML / CSS
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
伦敦新晋轻奢耳饰潮牌:Tada & Toy
2020/05/25 全球购物
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
2014/09/09 面试题
linux面试题参考答案(3)
2012/09/13 面试题
事业单位鉴定材料
2014/05/25 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
2014年酒店服务员工作总结
2014/12/08 职场文书
材料采购员岗位职责
2015/04/03 职场文书
爱国影片观后感
2015/06/18 职场文书
用Python监控你的朋友都在浏览哪些网站?
2021/05/27 Python
用JS写一个发布订阅模式
2021/11/07 Javascript