zoukankan      html  css  js  c++  java
  • python_day27__socketserver模块_多人和一个人聊天

      最近肯是事情有点多吧,然后就一直没有去学习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()

  • 相关阅读:
    【积累总结】JS基础日常总结
    【积累总结】CSS日常总结
    【学习】JavaScript单线程与异步
    【学习指南】淘宝首页性能优化实践
    【学习】JS中的跨域
    007_stdc_C语言基础
    006_stdc_C语言基础
    005_stdc_C语言基础
    004_stdc_C语言基础
    003_stdc_linux基本常用命令_C语言基础
  • 原文地址:https://www.cnblogs.com/YiYA-blog/p/9978238.html
Copyright © 2011-2022 走看看