• python---socket模块


    仅以此纪念学习过程!翻译和各方面会有不到位的地方。如有错误,请指出。谢谢。

    #coding:utf-8
    import socket
    
    
    """
    socket()方法返回了一个socket对象。
    """
    
    def create_connection(address,timeout,source_address):
        """
        .连接一个监听internet地址(host,port)的TCP服务,返回socket对象。这是相比socket.connect()高级的方法。
        .如果hosts是一个非数字的主机名,会去连接所有可能的主机直到成功连接。使得编写兼容IPV4和IPV6的客户端变得容易。
        timeout会在尝试去创建连接之前为socket实例设置超时时间。如果没有超时时间,则将会默认设置为全局默认超时时间。通过:getdefaulttimeout()来获取。
        """
        addrinfo=socket.getaddrinfo("example.org", 80)[0][-1]
        print addrinfo
        conn=socket.create_connection(addrinfo)
        print conn
       
    def getaddrinfo(host,port,family,socktype,proto,flags):
        """
        .将host/port转化为创建一个连接到那个服务的socket所需的一个包含必要参数的5元元祖的序列。host是一个域名、一个IPv4或IPv6字符串或None。
        port是一个字符串服务名类似:"http"、数字化的port或None。对于host/port为None,会转化为底层C中的Null
        family、sockettype、proto:是可选参数,用来筛选返回值。默认情况下,它们的值为0。意味着全部结果都被选中。
        flags:可以决定结果怎样被计算和返回。flags默认值为0.例如:AI_NUMERICHOST将会不支持域名,否则会报错。
        result是如以下格式的5元元组:
        (family,socktype,proto,canonname,sockaddr)
        family,socktype,proto都是integer。将会被转化为socket()方法。如果AI_CANONNAME是flags之一。canonname将会表示主机canonname的字符串。
                否则canonname将会为empty。sockadd是一个描述socket地址的元祖。
                如果是AF_INET则格式为:(address,port),如果为AF_INET6,则返回(address,port,flow info,scope id)
        example:
        """
        print socket.getaddrinfo("example.org",80,0,0,socket.IPPROTO_TCP)
        print socket.getaddrinfo("www.baidu.com", "http")  #port可以是"http"
        print socket.getaddrinfo("www.baidu.com","80")
        
            
    def getfqdn(name):
        """
        .返回一个name对应的完全合格的域名。如果name被忽略,将会被解释为本地主机。为了找到合格的域名,将会检查gethostbyaddr()返回的主机名称,以及随之而来的别名。
                如果可用,第一个名称将会被选中。当没有任何一个合格的域名可用时,将会把gethostname()的返回值作为返回值
        """
        print socket.getfqdn()
        print socket.getfqdn("www.baidu.com")
        print socket.getfqdn("example.org")
        
    def gethostbyname(hostname):
        """
        .将hostname转化为IPv4格式的字符串。例如:100.50.200.5。如果hostname本身就是一个ipv4格式的字符串,则原值返回。
                 想要查看更加完整的接口:gethostbyname_ex()。
        gethostbyname()不支持IPv6。 getaddrinfo()应该被用来代替ipv4/v6双重支持
        """
        print socket.gethostbyname("localhost")
        print socket.gethostbyname("example.org")
        print socket.gethostbyname("www.baidu.com")
        print socket.gethostbyname("10.2.3.6")
    
    def gethostbyname_ex(hostname):
        """
        .将hostname转化为IPV4格式。 是gethostbyname(hostname)的一个扩展接口。
                返回一个三元组(hostname,aliaslist,ipaddrlist) 这里:hostname是对应ipaddress的给定的原始主机名。
        aliaslist【可能为空】是相同地址可供选择的主机名列表。ipaddrlist是相同主机相同接口对应的ipv4地址列表。
        gethostbyname_ex()不支持ipv6地址。 getaddrinfo()应该被用来提供对ipv4和ipv6的支持
        """
        print socket.gethostbyname_ex("localhost")
        print socket.gethostbyname_ex("example.org")
        print socket.gethostbyname_ex("www.baidu.com")
        print socket.gethostbyname_ex("127.0.0.1")
    
    def gethostname():
        """
                返回正在执行python解释器的主机名的字符串
                如果想要知道当前的主机IP,可以使用:gethostbyname(gethostname())。
                这个操作假设有一个有效的IP地址和主机的映射。这个假设并不总是有效。
                注意:gethostname()并不总是返回完全规格的域名。应该使用getfqdn()
        """
        print socket.gethostname()
        print socket.gethostbyname(socket.gethostname())
        print socket.getfqdn()
        "推荐使用socket.getfqdn()"
        print socket.gethostbyname(socket.getfqdn())  
        
    def gethostbyaddr(ip_address):
        """
        return三元组:(hostname,aliaslist,ipaddrlist) 结果和gethostbyname_ex(hostname)一致。
                想要得到完全规格的主机名,需使用:getfqdn()。
        gethostbyaddress()对于ipv4和ipv6都支持。
        """
        print socket.gethostbyaddr("127.0.0.1")
    
    def getnameinfo(sockaddr,flags):
        """
                将sockaddr转换为2元祖:(host,port)。由flags决定结果包含全规格的域名还是数字化的指向主机的地址。
                类似的,port可以包含一个字符串端口名或数字型的端口号。
        """
        sockaddr=socket.getaddrinfo("127.0.0.1","90")[0][4]
        print socket.getnameinfo(sockaddr,socket.AI_NUMERICHOST)
        
    
    def getprotobyname(protocolname):
        """
        .会将网络协议名称转化为适合传递的常数。就像socket()函数中的第三个可选的参数。 仅仅会被以SOCK_RAW模式打开的socket需要。
                对于普通的socket模式,如果protocol为0或被忽略时,正确的协议会被自动选择
        """
        print socket.getprotobyname("icmp") #1
        print socket.getprotobyname("udp") #17
        print socket.getprotobyname("tcp") #16
        print socket.getprotobyname("ip") #0
        
    def getservbyname(servicename,protocolname):
        """
        .将网络服务名和协议名转化为这个服务对应的端口号。可选的协议名为:tcp   udp   或其他可以匹配的任何协议
        protocolname是可选参数
        """
    
    def getservbyport(port,protocolname):
        """
                将网络端口号和协议名转化为那个服务的服务名。  protocolname为类似:"tcp"  upd" 之类的可匹配的协议"
        """
    
    def socket_test(family,type,proto):
        """
        family、type、proto是可选的
               使用给定的地址family、socket类型和协议号创建一个socket.family默认是AF_INET 或AF_INET6或AF_UNIX
        socket类型默认是:SOCK_STREAM。 SOCK_DGRAM  或其他SOCK_...常数之一。
        proto为1或者省略。。。  1时是"ip" 协议
        """
        print socket.socket()
        
    def socketpair(family,type,proto):
        """
                返回一对使用famil、type、proto创建的已连接的socket对象。family、type、proto和socket()参数一致
                默认family为AF_INET。  如果被平台拒绝的话,family默认为AF_UNIX。
                这个方法适用平台:UNIX
        """
        #print socket.socketpair()  #windows上没有该方法
       
    def fromfd(fd,family,type,proto):
        """
                复制文件描述符(通过file.fileno()返回的整数),并通过结果创建一个socket对象。
        """   
     
    def  ntoh1(x):
        """
        .将网络上的32bit的正整数转化为主机字节顺序。当主机字节顺序和网络字节顺序一致时,没有任何操作。否则执行一个4bit的转换操作
        """
        
    def ntohs(x):
        """
        .将网络上的16bit的正整数转化为主机字节顺序。当主机字节顺序和网络字节顺序一致时,没有任何操作。否则执行一个2bit的转换操作
        """
        
    def htonl(x):
        ".将本机的32bit的正整数转化为网络字节顺序。当主机字节顺序和网络字节顺序一致时,没有任何操作。否则执行一个4bit的转换操作"
    
    def htons(x):
        ".将主机上的16bit的正整数转化为主机字节顺序。当主机字节顺序和网络字节顺序一致时,没有任何操作。否则执行一个2bit的转换操作"
    
    def inet_atoon(ip_string):
        """
        
        """
    
    
    
    if __name__ == "__main__":
        """
        create_connection(None,None,None)
        getaddrinfo(None,None,None,None,None,None)
        getfqdn(None)
        gethostbyname(None)
        gethostbyname_ex(None)
        gethostname()
        gethostbyaddr(None)
        getnameinfo(None,None)
        getprotobyname(None)
        getservbyname(None,None)
        socket_test(None,None,None)
        """
        
        
        
       
        
        
        
        
       
        
        

     TO_BE_CONTINUED!

  • 相关阅读:
    全链路压测(4):全链路压测的价值是什么?
    基于SVN的版本范围汇总
    一篇值得思考的职业教育之路!
    分享35个讨人喜欢的漂亮进度条UI设计
    转一篇难得的好文章CPU流水线的探秘之旅
    超棒的获奖动物摄影作品集
    解决web.py在SAE云中的Session使用问题
    2012年度最新免费web开发设计资源荟萃
    Endless icon: 每天都更新的图标集
    不容错过的超棒Javascript日期处理类库Moment.js
  • 原文地址:https://www.cnblogs.com/lindsay-chh/p/4718284.html
Copyright © 2020-2023  润新知