• python_day27__socketserver模块_多人和一个人聊天(2)


      最近肯是事情有点多吧,然后就一直没有去学习python,今天补上了。

    server端

    #Author:'haijing'

    #date:2018/11/15
    #socket的方法比如bind方法、listen方法、都被封装在socketserver中
    #具体怎么去接收和发送都在类中的handle方法中自己去定义
    #listen方法在socketserver中默认为5个

    import socketserver

    class MyServer(socketserver.BaseRequestHandler): #定义一个类MyServer(类名可随意),并继承socketserver.BaseRequestHandler这个类
    def handle(self): #必须叫hanlde,因为在socketserver模块下BaseRequestHandler类下有handle方法,现在重写这个方法
    print ("服务端启动...")
    while True:
    conn = self.request #等价于conn, addr = sk.accept()
    print (self.client_address) #
    while True:
    client_data=conn.recv(1024) #收
    print (str(client_data,"utf8"))
    print ("waiting...")
    server_response = input('>>>')
    conn.sendall(bytes(server_response,'utf8')) #发 server端输入并发送
    conn.close()

    if __name__ == '__main__': #防止在调用server.py或者模块时,执行下面的语句,即import server会自动执行下面的语句,为防止执行,那么加上if __name__=='__main__'
    server = socketserver.ThreadingTCPServer(('127.0.0.1',8091),MyServer) #固定的形式,只要想实现并发,那么就这样写
    server.serve_forever() #启动,执行handle方法
    #Threading多线程 TCP协议 Server服务

    #socket都封装在了socketserver中
    #只有handle不能改,其余变量都可以随意的改

    =========================================以下均是相关解释==============================================


    #对于socketserver.ThreadingTCPServer(('127.0.0.1',8091),MyServer)
    #socketserver.py是一个模块,该模块下有ThreadingTCPServer类
    #看到一个类,首先要去看它自己有没有__init__()方法,如果自己没有,那么再自左向右的看继承的父类中有没有__init__()方法

    #对于server.serve_forever()
    #首先会去ThreadingTCPServer类中去找,有没有serve_forever方法,如果没有,那么再去ThreadingTCPServer继承的类中去找
    #有没有serve_forever方法,如果ThreadingTCPServer继承的类中没有,那么再去(ThreadingTCPServer继承的类)的继承的类中
    #去找,有没有serve_forever方法


    #比如在Foo.py中的最后有两句
    # if __name__ == '__main__':
    # hello() #其中hello是Foo.py中的一个方法,其中hello做测试用
    # 在另一个文件中调用Foo这个模块时候
    # import Foo 如果不加上if __name__ == '__main__': 那么import Foo就会去执行测试用的语句hello方法
    =================================相关解释结束============================================================


    client端
    #Author:'haijing'
    #date:2018/11/15
    #client端没有多大的变化

    import socket

    ip_port = ('127.0.0.1',8091)
    sk = socket.socket()
    sk.connect(ip_port)
    print ("客户端启动:")
    while True:
    inp = input('>>>')
    sk.sendall(bytes(inp,"utf8"))
    if inp == 'exit':
    break
    server_response=sk.recv(1024)
    print (str(server_response,"utf8"))
    sk.close()

  • 相关阅读:
    maven解决“Could not calculate build plan”问题
    HTTP中的重定向和请求转发的区别
    (转)《杂 文》 之 教你制作一份属于自己的简历
    (转)《SSO CAS单点系列》之 实现一个SSO认证服务器是这样的!
    (转)《SSO CAS单点系列》之 15分钟让你了解SSO技术到底是个什么鬼!
    (转)帮你深入理解OAuth2.0协议
    opengl库区分:glut、freeglut、glfw、glew、gl3w、glad
    OpenGL中的光照技术(翻译)
    [转]gluProject 和 gluUnproject 的详解
    英文版Ubuntu18.10安装搜狗输入法过程(图文并茂,亲自尝试!)
  • 原文地址:https://www.cnblogs.com/YiYA-blog/p/9978247.html
Copyright © 2020-2023  润新知