路飞学城Python-Day27(复习)
简单的socket通信
- import socket
- client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- client.connect(('127.0.0.1', 8080))
- msg = input('>>>').strip()
- client.send(msg.encode('gbk'))
- res = client.recv(1024)
- print(res)
- client.close()
客户端
- import socket
- sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- sk.bind(('127.0.0.1', 8080))
- sk.listen(5)
- conn, addr = sk.accept()
- res = conn.recv(1024)
- conn.send(res.upper())
- conn.close()
- sk.close()
服务端
聊天版socket通信
- import socket
- client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- client.connect(('127.0.0.1', 8080))
- while True:
- msg = input('发送信息>>>').strip()
- client.send(msg.encode('gbk'))
- re = client.recv(1024)
- print('接收到的消息%s'%(re.decode('gbk')))
聊天版客户端
- import socket
- server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- server.bind(('127.0.0.1', 8080))
- server.listen(5)
- while True:
- conn,addr = server.accept()
- while True:
- try:
- msg = conn.recv(1024)
- print('接收到客户端的信息%s'%(msg.decode('gbk')))
- re = input('请回复信息>>>').strip()
- conn.send(re.encode('gbk'))
- except ConnectionResetError:
- pass
聊天版服务端
粘包版socket通信
- import socket
- import struct
- import pickle
- client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- client.connect(('127.0.0.1', 8080))
- while True:
- msg = input('请输入发送的消息>>>').strip()
- msg_dict = {
- 'msg':msg
- }
- msg_p = pickle.dumps(msg_dict)
- client.send(struct.pack('i',len(msg_p)))
- res = pickle.loads(client.recv(1024))
- if res['confirm']:
- client.send(msg.encode('gbk'))
- else:
- pass
粘包版客户端
- import socket
- import struct
- import pickle
- server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- server.bind(('127.0.0.1', 8080))
- server.listen(5)
- while True:
- conn, addr = server.accept()
- while True:
- res = conn.recv(4)
- receive_bytes = struct.unpack('i',res)[0]
- if receive_bytes<1024:
- msg = {
- 'confirm': True,
- }
- msg_p = pickle.dumps(msg)
- conn.send(msg_p)
- res = conn.recv(1024)
- print(res.decode('gbk'))
- else:
- msg = {
- 'confirm':False,
- }
- msg_p = pickle.dumps(msg)
- conn.send(msg_p)
粘包版服务端
写一个异常
- try:
- int_number = int(input('请输入一个整数').strip())
- print(int_number)
- except Exception as e:
- print(e)
写一个异常
自定义异常
- class E(BaseException):
- def __init__(self):
- err = '发生异常了!'
- BaseException.__init__(self,err)
- raise E
自定义异常
windows系统版客户端和服务端
- import socket
- import pickle
- import struct
- import subprocess
- client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- client.connect(('127.0.0.1', 8080))
- while True:
- command = input('请输入命令>>>').strip()
- msg_dict = {
- 'msg':command
- }
- msg = pickle.dumps(msg_dict)
- client.send(struct.pack('i', len(msg)))
- res = client.recv(1024)
- if pickle.loads(res)['confirm']:
- client.send(command.encode('gbk'))
- # 解析长度
- res_len = client.recv(4)
- cmd_len = struct.unpack('i',res_len)[0]
- # 接收结果
- fin_res = client.recv(cmd_len).decode('gbk')
- print(fin_res)
- else:
- print('超出字符限制,请重试!')
(系统命令版)客户端
- import socket
- import pickle
- import struct
- import subprocess
- # a=subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE)
- # print(a.stdout.read().decode('gbk'))
- server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- server.bind(('127.0.0.1', 8080))
- server.listen(5)
- while True:
- conn, addr = server.accept()
- while True:
- try:
- res = conn.recv(4)
- res_bytes = struct.unpack('i',res)[0]
- if res_bytes<1024:
- msg = {
- 'confirm':True,
- }
- conn.send(pickle.dumps(msg))
- cmd = conn.recv(1024).decode('gbk')
- cmd_res = subprocess.Popen(
- cmd,
- shell= True,
- stdout= subprocess.PIPE,
- stderr= subprocess.PIPE
- )
- res_cmd = cmd_res.stdout.read()
- # 发送长度
- conn.send(struct.pack('i',len(res_cmd)))
- # 发送结果
- conn.send(res_cmd)
- else:
- msg = {
- 'confirm': False,
- }
- conn.send(pickle.dumps(msg))
- except Exception as e:
- print(e)
- break
(系统命令版)服务端
路飞学城Python-Day27(复习)的更多相关文章
- 路飞学城—Python爬虫实战密训班 第三章
路飞学城—Python爬虫实战密训班 第三章 一.scrapy-redis插件实现简单分布式爬虫 scrapy-redis插件用于将scrapy和redis结合实现简单分布式爬虫: - 定义调度器 - ...
- 路飞学城—Python爬虫实战密训班 第二章
路飞学城—Python爬虫实战密训班 第二章 一.Selenium基础 Selenium是一个第三方模块,可以完全模拟用户在浏览器上操作(相当于在浏览器上点点点). 1.安装 - pip instal ...
- 路飞学城Python爬虫课第一章笔记
前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 之前看阮一峰的博客文章,介绍到路飞学城爬虫课程限免,看了眼内容还不错,就兴冲冲报了名,99块钱满足以下条件会返还并送书送视频. 缴 ...
- 路飞学城-Python开发集训-第3章
学习心得: 通过这一章的作业,使我对正则表达式的使用直接提升了一个level,虽然作业完成的不怎么样,重复代码有点多,但是收获还是非常大的,有点找到写代码的感觉了,遗憾的是,这次作业交过,这次集训就结 ...
- 路飞学城-Python开发集训-第1章
学习体会: 在参加这次集训之前我自己学过一段时间的Python,看过老男孩的免费视频,自我感觉还行,老师写的代码基本上都能看懂,但是实际呢?....今天是集训第一次交作业的时间,突然发现看似简单升级需 ...
- 路飞学城-Python开发集训-第4章
学习心得: 学习笔记: 在python中一个py文件就是一个模块 模块好处: 1.提高可维护性 2.可重用 3.避免函数名和变量名冲突 模块分为三种: 1.内置标准模块(标准库),查看所有自带和第三方 ...
- 路飞学城-Python开发集训-第2章
学习心得: 这章对编码的讲解超级赞,现在对于编码终于有一点认知了,但还没有大彻大悟,还需要更加细心的琢磨一下Alex博客和视频,以前真的是被编码折磨死了,因为编码的问题而浪费的时间很多很多,现在终于感 ...
- 路飞学城-Python开发-第二章
''' 数据结构: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家' ...
- 路飞学城-Python开发-第三章
# 数据结构: # goods = [ # {"name": "电脑", "price": 1999}, # {"name&quo ...
- 路飞学城-Python开发-第一章
# 基础需求: # 让用户输入用户名密码 # 认证成功后显示欢迎信息 # 输错三次后退出程序 username = 'pandaboy' password = ' def Login(username ...
随机推荐
- Redis详解入门篇(转载)
Redis详解入门篇(转载) [本教程目录] 1.redis是什么2.redis的作者3.谁在使用redis4.学会安装redis5.学会启动redis6.使用redis客户端7.redis数据结构 ...
- java 常用API 包装 练习
package com.oracel.demo01; import java.util.Random; public class Swzy { public static void main(Stri ...
- 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
这是在复制代码的时候,没有修改路径,但是IDEA没有报错,还会爆出 WARN ework.web.servlet.PageNotFound - No mapping found for HTTP re ...
- centos7编译安装mysql5.6
先安装如下依赖包: $ yum -y install make gcc-c++ cmake bison-devel ncurses-devel 下载MySQL5.6.14安装包,https://pa ...
- Django的时间字段DateTimeField
一. Django的时间字段DateTimeField 创建django的model时,有DateTimeField.DateField和TimeField三种类型可以用来创建日期字段,其值分别对应着 ...
- ssh远程连接和linux基本操作
客户端工具:Xshell,SecureCRT 启动网卡(eth0): ifup eth0 查看IP地址: ifconfig [root@oldboy~] : [登入名 @ 主机名 文件或者 ...
- css文本两端对齐
在做表单时我们经常遇到让上下两个字段对齐的情况,比如姓名, 手机号码, 出生地.这样我们就要用到 text-align, text-justify样式了. text-align直接设为justify就 ...
- 洛谷 1144 最短路计数 bfs
洛谷1144 最短路计数 传送门 其实这道题目的正解应该是spfa里面加一些处理,,然而,,然而,,既然它是无权图,,那么就直接bfs了,用一个cnt记录一下每一个点的方案数,分几种情况讨论一下转移, ...
- Linux C++服务器端进程SDK
目标:开发人员在这个SDK的基础上开发,不用关注技术细节,只需要开发对应业务消息处理函数即可 1.每个进程SDK包括一个系统服务和多个业务服务,对外发布服务ID,每个服务有一个请求队列和一个反馈队列, ...
- Java&Xml教程(十一)JAXB实现XML与Java对象转换
JAXB是Java Architecture for XML Binding的缩写,用于在Java类与XML之间建立映射,可以帮助开发人员非常方便的將XML和Java对象进行相互转换. 本文以一个简单 ...