Python socket模块方法实现详解
作者:星辉笑 发布时间:2021-02-12 20:52:39
标签:python,socket,模块
这篇文章主要介绍了Python socket模块方法实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
socket ssh (不带防止粘包的方法)
#! /usr/bin/env python
# -*- coding:utf-8 -*-
# Author Ian Ying
# mail: kongqing.ying@yitu-inc.com
import socket
import os
server = socket.socket()
server.bind(('localhost', 6969)) #绑定被监听端口
server.listen(5) #监听端口
while True:
print("我要开始等电话了")
conn, addr = server.accept() # 就是等待的意思
#conn就是客户端连过来的时候,在服务器端为其生成的一个连接实例
print("电话来了%s"% [conn, addr])
while True:
data = conn.recv(1024)
if not data:
print('client is lost.')
break
# res = os.popen(data).read() #popen就是打开命令执行,read就是获取结果
# with open('filename', 'r') as ret: #这两行就 可以用过来传输文件了。
# data = ret.read()
print('receive:',data)
conn.send(data.upper())
server.close()
socket client 模块
#! /usr/bin/env python
# -*- coding:utf-8 -*-
# Author Ian Ying
# mail: kongqing.ying@yitu-inc.com
import socket
client = socket.socket() #声明socket类型,同时生成socket链接对象
client.connect(('localhost',6969)) #localhost就是本机地址
while True:
msg = input('input msg >>:').strip()
if len(msg) == 0: continue #检查msg的信息,防止无输入信息
#client.send(b"Hello, world!") #发送信息
client.send(msg.encode('utf-8'))
data = client.recv(1024) #默认接受1024字节,就是1k
# with open('filename', 'w') as ret: # 这两行就 可以用过来传输文件了。
# ret = data.write()
print(data.decode())
client.close() #关闭端口
防止粘包的socket_ssh.py
#! /usr/bin/env python
# -*- coding:utf-8 -*-
# Author Ian Ying
# mail: kongqing.ying@yitu-inc.com
import socket
import os
server = socket.socket()
server.bind(('localhost', 6969)) #绑定被监听端口
server.listen(5) #监听端口
while True:
print("我要开始等电话了")
conn, addr = server.accept() # 就是等待的意思
#conn就是客户端连过来的时候,在服务器端为其生成的一个连接实例
while True:
data = conn.recv(1024).decode()
print("电话来了%s" % type(data))
# if type(data) is str:
# data = data.strip()
if not data:
print('client is lost.')
break
cmd_res = os.popen(data).read() #popen就是打开命令执行,read就是获取结果
cmd_res_size = str(len(cmd_res.encode("utf-8")))
print("before send",len(cmd_res),"size after encode", cmd_res_size)
if len(cmd_res) == 0:
print("there is no output.")
res_warning = "there is no output."
conn.send(res_warning.encode("utf-8"))
continue
else:
conn.send(cmd_res_size.encode("utf8"))
print(conn.recv(1024).decode()) #通过接收数据的形式来强制发送缓冲区的数据,防止粘包。
# with open('filename', 'r') as ret: #这两行就 可以用过来传输文件了。
# data = ret.read()
#print('receive:',data)
print('receive:', data)
conn.send(cmd_res.encode("utf-8"))
# conn.send(bytes(cmd_res)) #不可行。传输的时候是需要encoding
server.close()
socket_client.py
#! /usr/bin/env python
# -*- coding:utf-8 -*-
# Author Ian Ying
# mail: kongqing.ying@yitu-inc.com
import socket
client = socket.socket() #声明socket类型,同时生成socket链接对象
client.connect(('localhost',6969)) #localhost就是本机地址
while True:
msg = input('input msg >>:').strip()
if len(msg) == 0: continue #检查msg的信息,防止无输入信息
#client.send(b"Hello, world!") #发送信息
client.send(msg.encode('utf-8'))
received_size = client.recv(1024).decode() #用来记录接受的数据大小
print("接收的数据大小", received_size)
received_cont = b''
received_cont_size = 0 # 用来判断接受数据的大小
if received_size != "there is no output." :
client.send("准备好了,可以发送。".encode()) #发送确认信息,以防止粘包
received_size = int(received_size) #数据需要变成int才能进行判断
while received_size != received_cont_size: #判断encode后的长度是否一致。
received_cont_for_test = client.recv(1024)
received_cont_size += int(len(received_cont_for_test))
received_cont = received_cont + received_cont_for_test
print("当前结束后的数据大小为:", received_cont_size)
# print(received_cont_size)
else:
print("数据接收完成,接收的数据大小为:", received_cont_size)
print("接收的内容为:\n",received_cont.decode(),"\n")
else:
print("output:\n", received_size)
# data = client.recv(1024) #默认接受1024字节,就是1k
# with open('filename', 'w') as ret: # 这两行就 可以用过来传输文件了。
# ret = data.write()
# print(data.decode())
# print(str(data))
client.close() #关闭端口
来源:https://www.cnblogs.com/Ian-learning/p/8454597.html
0
投稿
猜你喜欢
- 本文实例为大家分享了python实现通讯录管理系统的具体代码,供大家参考,具体内容如下=====欢迎使用通讯录管理系统=====1.添加2.
- Python 是一门更注重可读性和效率的语言,尤其是相较于 Java,PHP 以及 C++ 这样的语言,它的这两个优势让其在开发者中大受欢迎
- 前言selenium是浏览器自动化测试框架,是一个用于Web应用程序测试的工具,可以直接运行在浏览器当中,并可以驱动浏览器执行指定的动作,如
- 前言:Python中for循环和while循环本质上是没有区别的,但是在实际应用上,针对性不太一样。for循环,主要应用在遍历中,体现的是遍
- 1.直接使用dlib安装dlib方法:Win10安装dlib GPU过程详解思路:1、使用dlib.get_frontal_fac
- 本文实例为大家分享了js实现全选取消效果的具体代码,供大家参考,具体内容如下<!DOCTYPE html><html la
- 本文实例讲述了php查询mysql数据库并将结果保存到数组的方法。分享给大家供大家参考。具体分析如下:这里主要用到了mysql_fetch_
- 这篇文章主要介绍了python构造函数init实例方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 1:构图图形的层次感图形和元素之间的层次感,可以在干扰视觉的同时,突出自身所想体现的主题,这种表现方式往往是比较直接而且有效的方式。我们所说
- 大多数网站维护都采用“多人协作,共同管理”方式。某个人负责一个(或者多个)栏目,他只能对他负责的栏目进
- 这是个老话题了,之所以再拿出来说,是因为浏览器一直在进步,以前最好的方法现在不一定是最好的。1 如何进行字符串连接?首先让我们来回顾一下字符
- 一、前言我们一般在做接口关联时,会通过保存中间变量实现接口关联,在关联时就需要用到变量提取,那今天我们就介绍接口自动化中变量提取的两大神器:
- 介绍matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方
- 姓名的翻译: 英语是名(First name)在前,姓(Last name)在后。中文地址的翻译:如果你英语水平不高,填表时只要国家名用英语
- 内容摘要:“ASP”(Active Server Pages)作为一种典型的服务器端网页设计技术,被广泛地应用在网上银行
- 在布尔索引中,我们将根据 DataFrame 中数据的实际值而不是它们的行/列标签或整数位置来选择数据子集。在布尔索引中,我们使用布尔向量来
- 什么是掩膜(mask)在numpy中,有一个模块叫做ma,这个模块几乎复制了numpy里面的所有函数,当然底层里面都换成了对自己定义的新的数
- 文章介绍OpenCV 库中包含很多运算函数,这里着重介绍按位运算的基本原理并举例说明。本篇文章中主要涉及到的函数有:按位与:bitwise_
- 本文讲述了Python多进程同步简单实现代码。分享给大家供大家参考,具体如下:#encoding=utf8from multiprocess
- Django中提供了一个类Paginator专门用来管理和处理分页数据,所以我们在使用之前先导入好相应的类,,另外这里我们也导入了待会会用到