zoukankan      html  css  js  c++  java
  • socket

    client_test.py

    #client
    import socket
    s=socket.socket()
    host=socket.gethostname()
    port=1234
    s.connect((host,port))  #使用的地址与bind方法中地址相同
    print(s.recv(1024).decode('utf-8'))
    s.send(b'thanks again from client
    ')
    s.close()

    Server_test.py

    #server
    #阻塞,同步网络编程
    import socket
    s=socket.socket() #地址族,流或数据报套接字,使用的协议
    host=socket.gethostname()
    port=1236   #低于1024的端口号用于标准服务
    s.bind((host,port))
    s.listen(5) #参数服务器未处理的连接的长度(即允许排队等待的连接数目)
    while True:
        c,addr=s.accept()
        print('got connection from',addr)
        #python 3.2 socket.send传送数据必须是byte
        #c.send(bytes('thanks for connection','UTF-8'))
        c.send(b'thanks for connection')
        print(c.recv(1024).decode('utf-8')) #收到b'Hello' 删掉前面b
        c.close()
    s.close()

    SocketServer.py

    #SocketServer
    '''
    SocketServer是标准库中很多服务器框架的基础,这些框架包括BaseHTTPServer,SimpleHTTPServer,
    CGIHTTPServer,SimpleXMLRPCServer,DocXMLRPCServer,
    所有这些服务器框架都为基础服务器增加了特定的功能
    SockerServer包含4个基本的类,针对TCP套接字流的TCPServer,UDP数据报套接字的UDPServer,
    以及针对性不强的UnixStreamServer和UnixDatagramServer
    '''
    from socketserver import TCPServer,StreamRequestHandler
    class Handler(StreamRequestHandler):
        def handle(self):
            addr=self.request.getpeername()
            print('from',addr)
            self.wfile.write(b'thanks')
            print(self.rfile.read(1024).decode())
    server=TCPServer(('',1234),Handler)
    server.serve_forever()
    
    '''
    为了写一个使用SocketServer框架的服务器,大部分代码会在一个请求处理程序中(request handler)。
    每当服务器收到一个请求(来自客户端的连接)时,就会实例化一个请求处理程序,
    并且他的各种处理程序类(handler class),这样可以把他们子类化,使得服务器调用自定义的处理程序集。
    基本的BaseRequestHandle类把所有的操作都放到了处理器的一个叫做handle的方法中,
    这个方法会被服务器调用。
    然后这个方法就会访问属性self.request中的客户端套接字
    如果使用的是流(如果使用的是TCPServer,这就是可能的),那么可以使用StreamRequestHandler类,
    创建了其他两个新属性,self.rfile(用于读取)和self.wfile(用于写入)
    然后就能使用这些类文件对象和客户机进行通信
    '''

    urllib_test.py

    #通过网络访问文件
    #from urllib import urlopen
    from urllib.request import urlopen #python3的库位置跟python2的有点不同
    from urllib.request import urlretrieve
    import re
    webpage=urlopen('http://www.baidu.com')
    'http://www.python.org'
    #urlopen返回的类文件对象支持close,read,readline,readlines方法
    #text=webpage.read().decode('utf-8')
    text=webpage.read().decode()
    '''
    m=re.search('<a href="([^"]+)" .*?>about</a>',text,re.IGNORECASE)
    print(m.group(1))
    '''
    #访问本地文件,用以file开头的URL访问本地文件,试验urllib是否在线
    webpage=urlopen(r'file:D:program filesPython34PyWorksABBREV.txt')
    print(webpage.read())
    
    #希望urllib为你下载文件并在本地文件中存储一个文件的副本,可以使用urlretrieve
    #urlretrieve返回一个元组(filename,headers)
    #filename是本地文件的名字,headers包含一些远程文件的信息
    filename,headers=urlretrieve('http://www.baidu.com','c:\a.html')
    print('filename:
    ',filename,'
    ')
    print('headers:
    ',headers)
    
    filename,headers=urlretrieve(r'file:D:program filesPython34PyWorksABBREV.txt',
                                 'c:\a.txt')
    print('filename:
    ',filename,'
    ')
    print('headers:
    ',headers)
  • 相关阅读:
    20191114PHP验证码
    20191114PHP图像绘制
    20191114PHP文件操作
    20191108添加数组元素操作
    20191108数组组合练习案例
    20191108PHP数组查找练习
    20191107数组排序练习
    20191107PHP创建数组练习
    20191107万年历
    20191101php日期练习
  • 原文地址:https://www.cnblogs.com/feifeidxl/p/5617912.html
Copyright © 2011-2022 走看看