尝试使用大厅,随机连接功能和加密创建Python聊天系统

时间:2018-05-10 04:05:16

标签: python encryption cryptography chat chatroom

修改 我目前正在开发基于Python的聊天系统。我在下面发布了一个问题,但是编辑它对我要找的内容更加狭窄。系统具有默认功能,无论何时输入LOGGED_IN状态,如果它不是命令,则显示聊天系统的菜单。 我的问题是我正在处理一个随机函数,尽管存在函数,菜单仍然出现,我怀疑客户端代码在这里有问题,但我似乎无法发现我的错误,这里是代码的摘录,完整文件链接如下:

elif my_msg[0:6]=="random":
                    mysend(self.s,json.dumps({"action":"random"}))
                    allresults = json.loads(myrecv(self.s))["results"]
                    result = allresults[0]
                    user=allresults[1]
                    if result: #==True
                        self.out_msg+="Peer Found\n"
                        self.out_msg+="Connecting you now...\n\n"
                        self.out_msg+='-----------------------------------\n'
                        if self.connect_to(user) == True:
                            self.state = S_CHATTING
                            if my_msg[7:]=="anon":
                                self.out_msg += 'Connected to anonymous user. Chat away!\n\n'
                            else:
                                self.out_msg += 'Connect to ' + user + '. Chat away!\n\n'
                            self.out_msg += '-----------------------------------\n'
                        else:
                            self.out_msg += 'An error occurred, please try again.\n'
                    else:
                        self.out_msg+="Peer not found, please try again later"

非常感谢任何帮助,我目前正在调试,但想到有人可能会看到我没有的东西

结束编辑

我目前正在与一些朋友一起研究基于Python的聊天系统,以了解有关内部工作的更多信息。我们一直在尝试实现和使用的一些关键功能是: - 一个大厅(人们可以随时调整的聊天室) - 随机连接功能(将用户随机连接在一起,有点像omegle) - 和加密。最后一点不一定非常复杂,但如果您有任何建议如何让它变得更好,我会很高兴听到它们。

文件位于here,我非常感谢您对大厅和随机函数发生的错误的任何反馈或洞察!

注意:要考虑的文件是:

  • chat_lobby.py(Lobby chatroom Class)
  • chat_group.py(一般群聊类)
  • chat_server_student.py(服务器端)
  • client_state_machine_student.py(客户端)

以下是服务器端的随机函数

elif msg["action"]=="random":
            name=self.logged_sock2name[from_sock]
            self.availableUsers = self.group.listloners()
            self.consent = False
            while (len(self.availableUsers)>0 and self.consent != True):
                   to_name = random.choice(availableUsers)
                   to_sock = self.logged_name2sock[to_name]
                   mysend(to_sock, json.dumps({"action":"consent"}))
                   #waiting for response
                   self.consent= json.loads(myrecv(self.s))["consent"]
                   if self.consent == True:
                       result= True
                       user = self.logged_sock2name[to_sock]
                   else:
                       result = False
                       user = ""
                       self.availableUsers.remove(to_name)
                   mysend(from_sock, json.dumps({"action":"random", "results":[result,user]})) 

这是来自客户端的随机函数:

elif my_msg[0:6]=="random":
                    mysend(self.s,json.dumps({"action":"random"}))
                    allresults = json.loads(myrecv(self.s))["results"]
                    result = allresults[0]
                    user=allresults[1]
                    if result: #==True
                        self.out_msg+="Peer Found\n"
                        self.out_msg+="Connecting you now...\n\n"
                        self.out_msg+='-----------------------------------\n'
                        if self.connect_to(user) == True:
                            self.state = S_CHATTING
                            if my_msg[7:]=="anon":
                                self.out_msg += 'Connected to anonymous user. Chat away!\n\n'
                            else:
                                self.out_msg += 'Connect to ' + user + '. Chat away!\n\n'
                            self.out_msg += '-----------------------------------\n'
                        else:
                            self.out_msg += 'An error occurred, please try again.\n'
                    else:
                        self.out_msg+="Peer not found, please try again later"

 if len(peer_msg) > 0:
                peer_msg = json.loads(peer_msg)
                consent=False
                if peer_msg["action"] == "connect":
                    self.connect_to(peer_msg["from"])
                    self.set_state(S_CHATTING)
                elif peer_msg["action"]=="consent":
                    self.out_msg += "A random user wants to connect with you?\n"
                    self.out_msg += "Would you like to accept the connection? (y or n)\n"
                    while my_msg != "y" and my_msg!="n":
                        self.out_msg += "Please only reply with 'y' or 'n'\n"
                    if my_msg=="y":
                        self.connect_to(peer_msg["from"])
                        self.set_state(S_CHATTING)
                        consent=True
                        mysend(self.s,json.dumps({"message":consent}))
                        self.out_msg+="Connecting you now...\n\n"
                    else:
                        consent=False
                mysend(self.s, json.dumps({"action":"random", "consent":consent}))

我的系统正常工作,只是这些部分很难绕过。 此外,服务器和客户端文件中的“大厅”文件和功能无法完全发挥作用,但我自己很难找到错误。

0 个答案:

没有答案