• python学习(十四) 网络编程


    14.1 少数几个网络设计模块

      14.1.1 socket模块

      套接字包括:服务器套接字和客户机套接字。

      在创建一个服务器套架字后,让它等待连接,这样它就在摸个网络地址处(IP地址和一个端口号的组合)监听,直到有客户套接字连接。连接完成后就可以交互了。

      服务器套接字比较麻烦,因为必须随时准备处理客户端连接,同时处理多个连接。

      一个套接字就是socket模块中的socket类的一个实例。实例化需要3个参数:

        第一个是地址族,默认是socket.AF_INET;

        第二个参数是流(socket.SOCK_STREAM)或数据报(socket.SOCK_DGRAM);

        第三个参数是使用协议

      服务器端Socket使用bind方法后,再调用listen方法去监听某个特定的地址。客户端套接字使用connect方法连接到服务器,在connect中使用的地址和服务器端bind的地址相同。

      服务器端socket.gethostname,能得到主机名。

      一个地址就是一个格式是(host,port)的元组,host是主机名,port是端口号。

      listen方法只有一个参数,即服务器未处理的连接长度。

      服务器端套接字开始监听后,就可以接受客户端连接。使用accept方法来完成。这个方法会阻塞(等待)直到有客户端连接,然后该方法就会返回一个格式为(client, address)的元组,client是一个客户端套接字,address是一个地址。服务器在处理完与该客户端的连接后,再调用accept方法开始等待下一个连接,这个过程通常在一个无限循环中实现的。

      套接字有连个方法:send和recv,用于传输数据。可以使用字符串参数调用send发送数据,用一个所需的(最大的)字节数做参数调recv来接收数据。

      server端

    import socket
    s = socket.socket()
    host = socket.gethostname()
    port = 1234
    s.bind((host, port))
    s.listen(5)
    
    while True:
        c, addr = s.accept()
        print('got connection from' %  addr)
        c.send('thanke you')
        c.close
    客户端:

    import
    socket s = socket.socket() host = socket.gethostname() port = 1234 s.connect((host, port)) print s.recv(1024)

      14.1.2 urllib和urllib2模块

      功能最强大的网络模块就是urllib和urllib2,通过他们访问网络上的文件,就像访问本地电脑上的文件一样。

      两个模块差不多,但是urllib2更好一些。如果只使用简单的下载,urllib足够了;如果要用到HTTP验证或cookie,或者要为自己的协议写扩展程序的话,那么URLlib2是更好的选择。

        1)打开远程文件:

          from urllib import urlopen

          webpage = urlopen('http://www.python.org')

          urlopen返回的文件类型支持close, read, realine和readlines

             2)获取远程文件

         urlopen返回的是能从中读取数据的类文件对象。如果希望urllib为你下载文件并在本地文件中存储一个文件的副本,那么可以使用urlretrieve.

         返回元组(filename, headers). 

      14.1.3 其他模块

    14.2 SocketServer和它的朋友们

    14.3 多个连接

      14.3.1 使用SocketServer进行分叉和线程处理

      14.3.2 带有select和poll的异步I/O

    14.4 Twisted

      14.4.1 下载并安装Twisted

      14.4.2 编写Twisted服务器

    14.5 小结

  • 相关阅读:
    Go接口特性
    go递归函数
    K8S部署Redis Cluster集群(三主三从模式) 部署笔记
    Jenkins密码忘记重置方法
    inode满了处理
    Linux 系统日常巡检脚本
    垃圾代码评析——关于《C程序设计伴侣》6.2(三)
    CRITICAL THINGKING笔记——ad hominem
    垃圾代码评析——关于《C程序设计伴侣》6.2(二)
    垃圾代码评析——关于《C程序设计伴侣》6.2(一)
  • 原文地址:https://www.cnblogs.com/liufei1983/p/7272552.html
Copyright © 2020-2023  润新知