网络编程之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初识


下一篇:仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表中为标识列指定显式值问题