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()
    

      

  • 相关阅读:
    bzoj1588
    bzoj1607
    bzoj2427
    Java-链表LinkedList源码原理分析,并且通过LinkedList构建队列
    Java --HashMap源码解析
    Java--volatile关键字的作用与用法
    Java--正则表达式-简单的在字符串中找数字
    Java--通过Spring AOP进行事务管理
    Java--String 和StringBuilder、StringBuffer 的区别?
    Java多线程--wait(),notify(),notifyAll()的用法
  • 原文地址:https://www.cnblogs.com/jachy/p/5106750.html
Copyright © 2011-2022 走看看