• python-网络编程-01


    我们常说的计算机网络通信,值得是两台,或者多台计算机间,进行数据传输。

    从计算机网络发展至今,人们使用了很多协议,但是最常用的还是tcp/ip协议,实际上这是一组协议。

    当然使用python做网络编程的时候,我们通常都会在tcp/ip协议上面编程。也就是我们不需要关心,tcp/ip层真正传输层协议

    【1】 socket

    通常我们可以这么理解socket -->用来标识远程主机上面的某一个进程。

    当我们的客户端请求,发送到服务器的网口上面去之后,操作系统让哪个进程去处理它呢?

    socket解决的就是这个问题。

    就相当于,我们去大厦里面找一个公司一样,通常都会有xx大厦几楼几零几。

    socket在服务器角度来看,其实就是一个文件(unix/linux),准确的说,是一个文件描述符(一般指的就是文件,或者类似文件的实体)

    对socket的操作,其实跟对文件的操作是极其相似的比如recv()和read()

    # -*- coding: utf-8 -*
    __author__ = 'Administrator'
    import socket
    def handle_request(client):
        buf = client.recv(1024)
        client.send("HTTP/1.1 200 OK
    
    ")
        client.send("Hello, World")
    
    def main():
        '''
        问题:如果想在小吃街开一家包子铺,总共需要几步
        '''
    
        # 【1】 取得经营许可证--->创建socket对象吧
        sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        #【2】找一家铺子开张-->监听socket
        sock.bind(('localhost',8080))
        sock.listen(5)
    
        #【3】开张
        while True:
            #【4】等客上门啊
            connetction,address = sock.accept()
            #connetction,address 分别是客户端对象和客户端地址44
            handle_request(connetction)
            connetction.close()
    
    if __name__ == '__main__':
        main()
    

      【2】socket 的建立

    import socket
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect(("www.baidu.com",80))
    

     我们可以看看这三行代码,最简单的socket的客户端代码

    #1 在python中我们想创建socket的时候 可以直接导入socket模块 通过实例化来获得socket对象

    #2 我们首先实例化了socket.socket,并且实例化过程中传递了两个参数 这里的AF_INET 值得是通信类型 这里指的是ipv4 而SOCK_STERAM 值得是协议 这里指的是TCP协议

    import socket
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    port = socket.getservbyname('http','tcp')
    print port
    s.connect(("www.baidu.com" ,port))
    

    #getservbyname 这个函数 默认维持一个庫,可以获取某个协议监听的tcp端口号 当然这个协议监听的端口号 是标准的 我们这里获取的http 当然你也可以换成udp

    【2】socket 的异常

    python 的socket 的模块定义了四种错误

    1> 与一般I/O的通信问题有关的 socket.error

    2>与查询地址有关的socket.herror

    3>与其他地址错误有关的socket.herror(和c语言中的h_errno相关

    4>与在一个socket上调用的settimeout()后处理超时有关的sock.timeout(需要2.3或者更高版本)

     当然我们能这些都是我们在大部分情况下能预见的错误

    但是在网络编程中,有的时候通信出现问题,却没有产生异常,因为对方没有传回错误

  • 相关阅读:
    173. Binary Search Tree Iterator
    199. Binary Tree Right Side View
    230. Kth Smallest Element in a BST
    236. Lowest Common Ancestor of a Binary Tree
    337. House Robber III
    449. Serialize and Deserialize BST
    508. Most Frequent Subtree Sum
    513. Find Bottom Left Tree Value
    129. Sum Root to Leaf Numbers
    652. Find Duplicate Subtrees
  • 原文地址:https://www.cnblogs.com/nerdlerss/p/6489295.html
Copyright © 2020-2023  润新知