zoukankan      html  css  js  c++  java
  • 网络编程之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()
  • 相关阅读:
    流程控制语句
    java运算符
    变量
    java虚拟机
    常量
    java注释
    java标识符
    单击显示随机文字
    2018/6/25~2018/6/29 周记
    2018/6/19~2018/6/22 周记
  • 原文地址:https://www.cnblogs.com/13507215809qwer-/p/9664296.html
Copyright © 2011-2022 走看看