zoukankan      html  css  js  c++  java
  • python开发之路SocketServer

    SocketServer与客户端进行连接的示意图:

     只要客户端连接进来,我们就为客户端创建1个线程或进程,创建完成之后,客户端直接和创建的线程直接进行通信(即3和4步),因此这样的话可以通过这个模块传输大的文件。

    1.基于线程版本的SocketServer示例

    server.py

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import SocketServer
    
    class MyServer(SocketServer.BaseRequestHandler):
        #重写handle方法
        def handle(self):
            # print self.request,self.client_address,self.server
            conn = self.request
            conn.sendall('welcome to call 10086,plz input 1,0 connect man servervice.')
            Flag = True
            while Flag:
                data = conn.recv(1024)
                if data == 'exit':
                    Flag = False
                elif data == '0':
                    conn.sendall('you have being getting man service....')
                else:
                    conn.sendall('plz input again.')
    
    
    if __name__ == '__main__':
        #创建SocketServer线程对象
        server = SocketServer.ThreadingTCPServer(('127.0.0.1',8009),MyServer)
        #执行server对象的serve_forever方法        
        server.serve_forever()
    

      

    client.py

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import socket
    
    
    ip_port = ('127.0.0.1',8009)
    sk = socket.socket()
    sk.connect(ip_port)
    sk.settimeout(5)
    
    while True:
        data = sk.recv(1024)
        print 'receive:',data
        inp = raw_input('please input:')
        sk.sendall(inp)
        if inp == 'exit':
            break
    
    sk.close()
    

     

    2.基于进程版本的SocketServer的示例(将上述服务器端中的ThreadingTCPServer换成ForkingTCPServer即可

    server.py

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import SocketServer
    
    class MyServer(SocketServer.BaseRequestHandler):
        #重写handle方法
        def handle(self):
            # print self.request,self.client_address,self.server
            conn = self.request
            conn.sendall('welcome to call 10086,plz input 1,0 connect man servervice.')
            Flag = True
            while Flag:
                data = conn.recv(1024)
                if data == 'exit':
                    Flag = False
                elif data == '0':
                    conn.sendall('you have being getting man service....')
                else:
                    conn.sendall('plz input again.')
    
    
    if __name__ == '__main__':
        #创建SocketServer线程对象
        server = SocketServer.ForkingTCPServer(('127.0.0.1',8009),MyServer)
        #执行server对象的serve_forever方法        
        server.serve_forever()
    

      

    client.py

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import socket
    
    
    ip_port = ('127.0.0.1',8009)
    sk = socket.socket()
    sk.connect(ip_port)
    sk.settimeout(5)
    
    while True:
        data = sk.recv(1024)
        print 'receive:',data
        inp = raw_input('please input:')
        sk.sendall(inp)
        if inp == 'exit':
            break
    
    sk.close()
    

      

  • 相关阅读:
    project3 blockchain
    RESTful Web服务与“大”Web服务: 做出正确的建筑决策
    project2
    LAB4
    云计算的描述性文献综述与分类研究
    SQL常见面试题(学生表_课程表_成绩表_教师表)
    等价类划分经典实例-三角形测试用例设计
    搜索框功能测试分析
    B/S结构-登录页面-测试用例设计
    软件测试面试--常用基本控件测试用例
  • 原文地址:https://www.cnblogs.com/jachy/p/5106750.html
Copyright © 2011-2022 走看看