2013-04-06 2 views
0

Вопросгнездо не может подключиться

Как я могу исправить мою программу, чтобы сделать это так, что гнездо всегда связано? Кроме того, проверьте свой код. Я видел много ответов об этом, но никто не работал.

Большое вам спасибо за помощь.

фон

Некоторое время я работал над программой для отправки сообщений по локальной сети. Я пытался работать над интеграцией моих знаний о GUI и сокетах в этом проекте. Но, , что бы я ни делал, сокет не смог оставаться на связи.

I have asked many questions about this, но независимо от того, что я не смог найти правильное исправление. Я считаю, что это моя вина - я сам преподаю и, возможно, не задал правильных вопросов. На этот раз я выбрал бланкет; прошу прощения за недостаток утонченности, но на данный момент это кажется лучшим. Here is a link to my code on paste bin. Я включил наиболее вероятные проблемные части ниже.

Сообщение об ошибке

('localhost', 1234) 
Socket created 
Socket bind complete 
Socket now listening 
Exception in Tkinter callback 
Traceback (most recent call last): 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 1410, in __call__ 
    return self.func(*args) 
    File "/Volumes/XXMBABANEXX'S USB/Python Programs/Sockets/IM Project/Server/Functions/Simple Server.py", line 148, in <lambda> 
    command = lambda: send_msg(s,message)) 
    File "/Volumes/XXMBABANEXX'S USB/Python Programs/Sockets/IM Project/Server/Functions/Simple Server.py", line 82, in send_msg 
    conn.sendall(my_message) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 224, in meth 
    return getattr(self._sock,name)(*args) 
error: [Errno 57] Socket is not connected 

Соответствующий код

В сообщении об ошибке говорит, что моя send_msg функция испытывает проблемы, я решил включить его ниже.

def send_msg(conn, message): 

    """Send Messages""" 
    #Send some data to the remote server 
    my_message = message.get("0.0", END) 


    #set the whole string 
    conn.sendall(my_message) 

Большое вам спасибо за вашу помощь. Эта проблема беспокоила меня месяцами, и я отказываюсь ее отпустить.

+0

Я использую Python 2.7.3 и на Mac OSX – xxmbabanexx

ответ

3

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

Отбросьте Tk и заправьте резьбу. Посмотрите на примеры SocketServer и запустите их. Работайте с этим, чтобы вы могли получить основное понимание сокетов, которое вам кажется недостаточным.

Как вы знаете, люди StackOverflow вряд ли захотят посмотреть ваш код pastebin. Я посмотрел на него, и он лишний и запутанный.

0

Вы отправляете данные на неправильном сокете - вам необходимо отправить его на клиентский сокет, а не в сокет. Общий шаблон для сервера выглядит так:

# Set up the listening socket 
listen_socket = socket.socket(...) 
listen_socket.bind(...) 
listen_socket.listen(...) 

# Accept connections and process them 
while should_continue_running: 
    client_socket, client_addr = listen_socket.accept() 

    # All communication with the new client should now happen on client_socket, 
    # NOT on listen_socket: 
    client_socket.recv(...) 
    client_socket.send(...) 
    ... 

    client_socket.close() 
2

Я бы начал с создания отдельных файлов python для клиента и сервера. Если они собираются использовать общие функции, а что нет, просто напишите файл common.py и импортируйте их в обоих.

После просмотра кода пастообразной корзины самая большая ошибка, которую я вижу, заключается в том, что вы не вызываете функцию SERVER_LOOP.

на линии 90, добавьте нить (цель = SERVER_LOOP, Args = (s)). Заводится() #start сервер нить

Во-вторых, тема создания на линии 91 будет выходить сразу после делая client.send().Коллекция мусора Python собирается разорвать сокет, независимо от того, как вы его создаете. поставьте там time.sleep (5) и заверните client.send («sup») через некоторое время 1 == 1: loop

Я настоятельно рекомендую вам найти хороший код примера для создания TCP-клиента и сервера python в python. Вот хороший старт: http://wiki.python.org/moin/TcpCommunication

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