网络编程之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()

 

posted @ 2018-09-17 19:17  i峥嵘岁月  阅读(126)  评论(0编辑  收藏  举报