这个宠物项目是关于创建一个微型聊天服务器和客户端。假设如下:
首先,客户端尝试登录,然后验证使用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)
而不是:
尝试使用:
相关问题 更多 >
编程相关推荐