我无法理解为什么我的函数失败,这与parseUser函数有关

2024-10-03 23:18:05 发布

您现在位置:Python中文网/ 问答频道 /正文

这个宠物项目是关于创建一个微型聊天服务器和客户端。假设如下:

首先,客户端尝试登录,然后验证使用tkinter编写的详细信息。与用户交互的第二个框架是聊天窗口。这完善了客户端

假定每个用户的详细信息存储在sqlite数据库中

另一方面,服务器首先创建(生成)一个套接字,并将其分配给每个用户,并使其保持登录状态

当第二个用户登录并尝试与第一个用户聊天时,服务器将验证第二个用户和两个用户的套接字对

我在这里为服务器编写了执行上述活动的代码,但由于某些原因它失败了。我得到以下错误:

runfile('C:/Users/CGDELL23/ChatServer/ChatServer.py', wdir='C:/Users/CGDELL23/ChatServer')
Traceback (most recent call last):

File "C:\Users\CGDELL23\ChatServer\ChatServer.py", line 18, in <module>
    __main__

NameError: name '__main__' is not defined

我认为它在parseUserData函数中失败了-你能帮忙吗

# -*- coding: utf-8 -*-
"""
Created on Fri Aug 14 10:00:54 2020

@author: Sathya Devarakonda

@Module: ChatServer.py
"""

#import networkX
import socket

import sqlite3
#from sqlite3 import error

import sys

__main__

#Network Variables
cSocket,sSocket = None

#Client socket Info
(cStrBuffer,cAncData,cflags,cAddr) = None

#Boolean Variables
validUser = None

#Arrays
newUser = []

#Variables
user,password,activityType,rUser,cUser, nullUser,nullPassword,x,y = None

#DB Connection con
con = None# Connection


class ChatServer:  
    def spawnSocket():
        sSocket.listen()
        cSocket = sSocket.accept()
        cSocket.connect()#Connection Established
        return cSocket;

    def closeSocket(cSocket):
        cSocket.close
        
    def parseUserData(cStrBuffer):
        return cStrBuffer.split(',')
        
            
    def disconnectUser(cUser):
        DBCalls.deleteUser(cUser)

    def validateUser(cSocket):
        (cStrBuffer, cAncdata, cFlags, cAddr)  = cSocket.recvmsg(1024)
        (activityType,user,password,cUser) = parseUserData(cStrBuffer)
        if (activityType == 'login'):
            return(cUser)
    
    def connectrUser(cSocket,rUser):
        try:
            rSocket = DBCalls.getUser(rUser)
            #(rStrBuffer,rAncdata, rFlags, rAddr) = rSocket.recvmsg(1024)
            socket.socketpair(cSocket,rSocket)
        except socket.err as err:
            print ('Creation of socket Failed')
            sys.settrace()
        except sqlite3.DatabaseError as error:
            print ('Db query Failed')
            sys.settrace()

    def chatUser(cUser):
        (cStrBuffer, cAncdata, cFlags, cAddr)  = cSocket.recvmsg(1024)
        (activityType,user,passsword,rUser) = parseUserData(cStrBuffer)
        if(activityType ==  'chat'):
            connectrUser(cSocket,rUser)   
        elif (activityType == 'logoff'):
            disconnectUser(rUser)
    
    def validateLoop():       
        try:  
            #Creating a Server Socket and binding it to localhost
            sSocket = socket.socket(-1,-1,-1,None)
            sSocket.bind("127.0.0.1")
        
            while(True):
                cSocket = spawnSocket()
                cUser = validateUser(cSocket)
                if (cUser):
                    chatUser(cUser)
        
        except socket.err as err:
                print ('Creation of socket Failed')
                sys.settrace()

    
            
class DBCalls:

    def createConn():
        try:
            con = sqlite3.connect('SockDetails')
        except socket.error as error:
            print ('Creation of connection failed')
            sys.settrace()
            
    def closeConn():
        try:
            con = sqlite3.close()
        except socket.error as error:
            print ('Closing connection failed')
            sys.settrace()
        
    def insertUser(cUser,cSocket,cAddr):
        try:
            userCursor =  con.cursor()
            userCursor.execute('insert into SockDetails (cUser,cSocket,cAddr)')
            con.commit
        except socket.error as error:
            print ('Error adding socket details')
            sys.settrace()
        finally:
            return (True)
        
    def checkUser(rUser):
        userIn = False #Boolean Flag    
        try:
            userCursor =  con.cursor()
            userCursor.execute('select * from SockDetails where user=cUser')
            con.commit                
        except socket.error as error:
            print ('Error checking socket details')
            sys.settrace()    
        return (userIn)
    
    def getUser(cUser):
        rSocket = False
        try:
            userCursor =  con.cursor()
            userCursor.execute('select socket from SockDetails where user=cUser')
            con.commit                
        except socket.error as error:
            print ('Error adding socket details')
            sys.settrace()    
        finally:
            return (rSocket)
    
    def deleteUser(cUser):
        try:
            userCursor =  con.cursor()
            userCursor.execute('delete * from SockDetails where user=rUser')
            con.commit                
        except socket.error as error:
            print ('Error delete socket details')
            sys.settrace()    
        finally:
            return (True)

Tags: 用户defassyserrorsocketconprint