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 数据加密代码
Dec 24 Python
安装Python的web.py框架并从hello world开始编程
Apr 25 Python
python实现的用于搜索文件并进行内容替换的类实例
Jun 28 Python
Python异常处理操作实例详解
May 10 Python
pytorch 调整某一维度数据顺序的方法
Dec 08 Python
Python弹出输入框并获取输入值的实例
Jun 18 Python
Python如何实现动态数组
Nov 02 Python
关于Python 常用获取元素 Driver 总结
Nov 24 Python
Django对接支付宝实现支付宝充值金币功能示例
Dec 17 Python
python-docx文件定位读取过程(尝试替换)
Feb 13 Python
python中列表的含义及用法
May 26 Python
python 瀑布线指标编写实例
Jun 03 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学习之流程控制实现代码
2011/06/09 PHP
PHP之将POST数据转化为字符串的实现代码
2016/11/03 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
ExtJS Window 最小化的一种方法
2009/11/18 Javascript
jQuery学习7 操作JavaScript对象和集合的函数
2010/02/07 Javascript
页面回到顶部的三种实现(锚标记,js)
2012/10/01 Javascript
jQuery设置与获取HTML,文本和值的简单实例
2014/02/26 Javascript
JavaScript Window浏览器对象模型方法与属性汇总
2015/04/20 Javascript
Jquery使用val方法读写value值
2015/05/18 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
js 创建对象 经典模式全面了解
2016/08/16 Javascript
node.js路径处理方法以及绝对路径详解
2021/03/04 Javascript
Angular2库初探
2017/03/01 Javascript
基于js 字符串indexof与search方法的区别(详解)
2017/12/04 Javascript
React组件设计模式之组合组件应用实例分析
2020/04/29 Javascript
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
Python while、for、生成器、列表推导等语句的执行效率测试
2015/06/03 Python
django 使用 request 获取浏览器发送的参数示例代码
2018/06/11 Python
Python 调用PIL库失败的解决方法
2019/01/08 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
使用canvas压缩图片上传的方法示例
2020/02/07 HTML / CSS
特步官方商城:Xtep
2017/03/21 全球购物
任意存:BOXFUL
2018/05/21 全球购物
汇科协同Java笔试题
2012/03/31 面试题
秋季运动会通讯稿
2014/01/24 职场文书
企业申诉管理制度
2014/01/30 职场文书
优秀员工演讲稿
2014/05/19 职场文书
公司收款委托书范本
2014/09/20 职场文书
2015年感恩节活动总结
2015/03/24 职场文书
煤矿安全生产工作总结
2015/08/13 职场文书
2016年教师节慰问信
2015/12/01 职场文书
Win11筛选键导致键盘失灵怎么解决? Win11关闭筛选键的技巧
2022/04/08 数码科技
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python