[Python] python通过进程内通信实现的聊天室程序代码 →→→→→进入此内容的聊天室

来自 , 2019-03-29, 写在 Python, 查看 124 次.
URL http://www.code666.cn/view/c5ab6ceb
  1. #!/usr/bin/env python
  2. # Added by <ctang@redhat.com>
  3. import sys
  4. import os
  5. from multiprocessing import connection
  6.  
  7.  
  8. ADDR = ('', 9997)
  9. AUTH_KEY = '12345'
  10.  
  11. class Server(object):
  12.  
  13.     def __init__(self, username):
  14.         self.auth_key = AUTH_KEY
  15.         self.addr = ADDR
  16.         self.username = username
  17.         self.listener = connection.Listener(self.addr, authkey=self.auth_key)
  18.  
  19.     def listen(self):
  20.         while True:
  21.             conn = self.listener.accept()
  22.             while True:
  23.                 try:
  24.                     request = conn.recv()
  25.                     response = self.response(request)
  26.                     conn.send(response)
  27.                 except EOFError:
  28.                     break
  29.             conn.close()
  30.  
  31.     def reply(self):
  32.         message = raw_input("%s: " % self.username)
  33.         return message
  34.  
  35.     def output_request(self, request):
  36.         sys.stdout.write('%s says: %s\n' % request)
  37.  
  38.     def response(self, request):
  39.         self.output_request(request)
  40.         response = (self.username, self.reply())
  41.         return response
  42.  
  43. class Client(object):
  44.  
  45.     def __init__(self, username):
  46.         self.auth_key = AUTH_KEY
  47.         self.addr = ADDR
  48.         self.username = username
  49.         self.display_name = self.make_display_name(username)
  50.  
  51.     def make_display_name(self, username):
  52.         return "%s: " % username
  53.  
  54.     def connect(self):
  55.         self.conn = connection.Client(self.addr, authkey=self.auth_key)
  56.         while True:
  57.             message = raw_input(self.display_name)
  58.             self.send(message)
  59.             response = self.conn.recv()
  60.             self.output_response(response)
  61.  
  62.     def send(self, message):
  63.         self.conn.send((self.username, message))
  64.  
  65.     def output_response(self, response):
  66.         sys.stdout.write('%s says: %s\n' % response)
  67.  
  68. def main():
  69.     mode = sys.argv[1]
  70.     if mode == 'server':
  71.         username = raw_input("Your name please: ")
  72.         server = Server(username)
  73.         server.listen()
  74.     elif mode == 'client':
  75.         username = raw_input("Your name please: ")
  76.         client = Client(username)
  77.         client.connect()
  78.  
  79. if __name__ == '__main__':
  80.     main()
  81. #//python/5046

回复 "python通过进程内通信实现的聊天室程序代码"

这儿你可以回复上面这条便签

captcha