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

posted @ 2018-11-18 16:12  兵临城下的匹夫  阅读(207)  评论(0编辑  收藏  举报
TOP