2015-03-02 2 views
0

Я пробовал все, что мог, чтобы запустить этот код, но я не могу понять, в чем проблема. Это программа-сервер/клиент чата в Python 3. Ошибка я получаю:NameError: имя 'record' не определено. Python 3

Traceback (most recent call last): 
    File "/home/nate/Desktop/soc_chat/server_soc.py", line 48,<module> 
    handler = ClientHandler(client, record) 
NameError: name 'record' is not defined 

Я не знаю, как я могу решить эту проблему. Любая помощь будет большой. Я нахожусь на ubuntu, с установленным python 3. Я попытался запустить код как «python3 myFile.py» в терминале вместо «python myFile.py» также, чтобы убедиться, что он не пытается запустить его как python 2. Как я уже сказал, любая помощь будет принята с большой благодарностью.

Вот код (на стороне сервера):

from socket import * 
from codecs import decode 
from chatrecord import ChatRecord 
from threading import Thread 
from time import ctime 

class ClientHandler(Thread): 

    def __init__(self, client, record): 
     Thread.__init__(self) 
     self._client = client 
     self._record = record 

    def run(self): 
     self._client.send(bytes('Welcome', CODE)) 
     self._name = decode(self._client.recv(BUFSIZE), CODE) 
     self._client.send(bytes(str(self._record), CODE)) 
     while True: 
      message = decode(self._client.recv(BUFSIZE), CODE) 
      if not message: 
       print('Client disconnected') 
       self._client.close() 
       break 
      else: 
       message = self._name + '' + \ 
          ctime() + '\n' + message 
       self._record.add(message) 
       self._client.send(bytes(str(self._record), CODE)) 


HOST = 'localhost' 
PORT = 5000 
BUFSIZE = 1024 
ADDRESS = (HOST, PORT) 
CODE = 'ascii' 
server = socket(AF_INET, SOCK_STREAM) 
server.bind(ADDRESS) 
server.listen(5) 

while True: 
    print('Waiting for connection...') 
    client, address = server.accept() 
    print('...connected from:', address) 
    handler = ClientHandler(client, record) 
    handler.start() 

код (на стороне клиента):

from socket import * 
from codecs import decode 

HOST = 'localhost' 
PORT = 5000 
BUFSIZE = 1024 
ADDRESS = (HOST, PORT) 
CODE = 'ascii' 
server = socket(AF_INET, SOCK_STREAM) 
server.connect(ADDRESS) 
print(decode(server.recv(BUFSIZE), CODE)) 
name = input('Enter your name: ') 
server.send(bytes(name, CODE)) 

while True: 
    record = decode(server.recv(BUFSIZE), CODE) 
    if not record: 
     print('server disconnected') 
     break 
     print(record) 
     message = input('> ') 
    if not message: 
     print('Server disconnected') 
     break 
     server.send(bytes(message, CODE)) 
server.close() 

Код (chatrecord.py)

class ChatRecord(object): 

    def __init__(self): 
     self.data = [] 

    def add(self, s): 
     self.data.appent(s) 

    def __str__(self): 
     if len(self.data) == 0: 
      return 'No messages yet!' 
     else: 
      return '\n'.join(self.data) 
+1

Так что вы ожидаете 'record' быть? Вы не определили его при вызове 'ClientHandler' .. –

ответ

1

Я собираюсь выйдите на конечность и скажите, что вы забыли следующую строку:

record = ChatRecord() 

Вы импортируете класс, но никогда не используете его в серверном коде.

Обратите внимание, что вы неправильно list.append() в методе ChatRecord.add():

def add(self, s): 
    self.data.appent(s) 
    #   ^
+0

спасибо, что указали это. Я понял, что запись не была настроена на ChatRecord, но я не поймал «append» с ошибками. Это говорит мне, что теперь «сообщение» не определено на стороне клиента. Я настроил его на вход, если в настоящее время нет сообщения со стороны сервера, но все, что я пробовал, заканчивается тем, что он отключается. – nahberry

+0

@ user3629818: если 'record' пуст на сервере, тогда' message' также не установлен. –

Смежные вопросы