网络编程之socketserver以及socket更多方法
关于socketserver
关于socket的更多方法
服务端套接字函数: s.bind() 绑定(主机,端口号)到套接字
s.listen() 开始tcp监听
s.accept () 被动接受tcp客户的连接,(阻塞式)等待连接的到来 客户端套接字函数: s.connect() 主动初始化tcp服务器连接
s.connect()_ex() 是拓展版本,出错时返回出错码,而。不是抛出异常。 公共用途的套接字函数 s.recv() 接收tcp数据
s.send() 发送tcp数据
s.sendall() 发送tcp数据
s.recvfrom() 接收udp数据
s.sendto() 发送udp数据
s.getpeername() 连接到当前套接字的远端的地址
s.getsockname() 当前套接字的地址
s.getsockopt() 返回指定套接字的参数
s.setsockopt() 设置指定套接字的函数
s.close() 关闭套接字 面向锁的套接字方法:
s.setbl1ocking() 设置套接字的阻塞与非阻塞模式
s.settimeout() 设置阻塞套接字操作的超时时间
s.gettimeout() 得到阻塞套接字操作的超时时间 面向文件的套接字的函数:
s.fileno() 套接字的文件描述符
s.makefile() 创建一个与该套接字相关的文件
1.2 验证客户端链接的合法性
注释:主要防止黑客截取信息然后植入病毒,采用加盐hmac方式实现简单的客户端链接认证功能。
import socket
import os
import hmac
def auth(conn):
msg=os.urandom(32)
conn.send(msg)
result=hmac.new(key,msg)
client_digest=conn.recv(1024)
if result.hexdigest()==client_digest.decode('utf-8')
print('是合法的连接')
else:
print(‘不合法的连接’)
return False secret_key=b'alex_ab'
sk=socket.socket()
sk.bind(('127.0.0.1',9000))
sk.listen()
conn,addr=sk.accept()
if auth(conn):
print(conn.recv(1024))
conn.close()
else:
conn.close()
sk.close()
import hamc
import socket
def auth(sk):
msg=sk.recv(32)
result=hmac.new(key,msg)
res=result.hexdigest()
sk.send(res.encode('utf-8'))
key=b'alex_s'
sk=socket.socket()
sk.connect(('127.0.0.1',9000))
auth(sk)
sk.send(b'upload')
sk.close()
1.3 关于socketserver的并发编程
import socketserver
class Myserver(socketserver.BaseTequestHandler):
def handle(self):
conn=self.request
while True:
conn.send(b'hello')
print(conn.recv(1024))
server=socketserver.ThreadingTCPSserver(('127.0.0.1',9000),Myserver)
server.serve_forever()
import socket sk = socket.socket()
sk.connect(('127.0.0.1',9000))
while True:
ret = sk.recv(1024)
print(ret)
sk.send(b'byebye')
sk.close()
网络编程之socketserver以及socket更多方法的更多相关文章
- python3网络编程之socketserver
本节主要是讲解python3网络编程之socketserver,在上一节中我们讲到了socket.由于socket无法支持多用户和多并发,于是就有了socket server. socket serv ...
- 网络编程之socketserver
网络编程之socketserver """ socketserver.py 中的5个基础类 +------------+ | BaseServer | +-------- ...
- 网络编程之socketserver初识
网络编程之socketserver初识 Server #!/usr/bin/env python # @Author : "Wjl" # @Date : 2017/12/22 # ...
- GO语言的进阶之路-网络编程之socket
GO语言的进阶之路-网络编程之socket 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是socket; 在说socket之前,我们要对两个概念要有所了解,就是IP和端口 ...
- 网络编程之Socket代码实例
网络编程之Socket代码实例 一.基本Socket例子 Server端: # Echo server program import socket HOST = '' # Symbolic name ...
- 网络编程之socket
网络编程之socket socket:在网络编程中的一个基本组件,也称套接字. 一个套接字就是socket模块中的socket类的一个实例. 套接字包括两个: 服务器套接字和客户机套接字 套接字的实例 ...
- 网络编程之Socket & ServerSocket
网络编程之Socket & ServerSocket Socket:网络套接字,网络插座,建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP ...
- [深入浅出Cocoa]iOS网络编程之Socket
http://blog.csdn.net/kesalin/article/details/8798039 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] [深入浅出Co ...
- [网络编程之Socket套接字介绍,套接字工作流程,基于TCP协议的套接字程序]
[网络编程之Socket套接字介绍,套接字工作流程,基于TCP协议的套接字程序] 为何学习socket套接字一定要先学习互联网协议: 1.首先:要想开发一款自己的C/S架构软件,就必须掌握socket ...
随机推荐
- 51nod 1423 最大二“货” 单调栈
利用单调栈,高效求出每个区间内的最大值和次大值的亦或值. 先正向扫描,利用单调递减栈,若当前栈为空栈,则直接压入栈中,若为非空栈,弹出栈顶元素,每弹出一个元素,则求一次亦或值,保留最大值 接着进行反向 ...
- django项目实现中文检索
在settings.py中设置 EMAIL_USE_SSL = True EMAIL_HOST = 'smtp.qq.com' # 如果是 163 改成 smtp.163.com EMAIL_POR ...
- 20165230 Exp3 免杀原理与实践
目录 1.实验内容 2.基础问题回答 3.实验内容 任务一:正确使用免杀工具或技巧 使用msf编码器,msfvenom生成如jar之类的其他文件 使用veil-evasion 自己利用shellcod ...
- Lua与C
[前言] 对于Lua的基础总结总算告一段落了,从这篇博文开始,我们才真正的进入Lua的世界,一个无聊而又有趣的世界.来吧. Lua语言是一种嵌入式语言,它本身的威力有限:当Lua遇见了C,那它就展示了 ...
- eclipse 报错问题:java.lang.ClassNotFoundException:
解决方法:https://www.cnblogs.com/whatlonelytear/articles/5921978.html
- C++中几个输入函数的用法和区别(cin、cin.get()、cin.getline()、getline()、gets()、getchar())
1.cin>> 用法1:最基本,也是最常用的用法,输入一个数字: #include <iostream>using namespace std;main (){int a,b; ...
- 上传jar包到maven中央仓库过程中遇到的一些问题总结!
网上有很多相关教程, 我按步骤一步步走下来, 都还算顺利, 简单列举一下步骤以及其中需要注意的几个点(不详细, 不适合当教程) 第一步: 到https://issues.sonatype.org/se ...
- MySql+EF <二>
C#使用Mysql+EF架构项目有一系列问题. 一.EF没有Mysql的驱动,这个需要自己安装2个插件 ①mysql-connector-net-6.9.10.msi ②mysql-for-visua ...
- pandas导入导出数据-【老鱼学pandas】
pandas可以读写如下格式的数据类型: 具体详见:http://pandas.pydata.org/pandas-docs/version/0.20/io.html 读取csv文件 我们准备了一个c ...
- sklearn交叉验证-【老鱼学sklearn】
交叉验证(Cross validation),有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法.于是可以先在一个子集上做分析, 而其它子集则用来做后续对此分析的确认及验证. 一开始 ...