2013-04-06 5 views
0

QuestionSocket ne peut pas se connecter

Comment puis-je réparer mon programme pour faire en sorte que la prise est toujours connecté? Aussi, s'il vous plaît tester votre code. J'ai vu beaucoup de réponses à ce sujet, mais aucune n'a fonctionné.

Merci beaucoup pour votre aide.

Contexte

Pendant un certain temps, je travaille sur un programme pour envoyer des messages sur le réseau local. J'ai essayé de travailler sur l'intégration de mes connaissances de l'interface graphique et des sockets dans ce projet. Mais, , peu importe ce que je semble faire, le socket a été incapable de rester connecté.

I have asked many questions about this, mais peu importe ce que je n'ai pas été en mesure de trouver la solution correcte. Je crois que c'est ma faute - je suis autodidacte et n'ai peut-être pas posé les bonnes questions. Cette fois, j'ai choisi une déclaration générale; S'il vous plaît pardonnez mon manque de finesse, mais cela semble être le meilleur moyen à partir de maintenant. Here is a link to my code on paste bin. J'ai inclus les parties problématiques les plus probables ci-dessous.

Message d'erreur

('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 

pertinentes du Code

Comme le message d'erreur dit que ma fonction send_msg a des problèmes, j'ai décidé d'inclure ci-dessous.

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) 

Merci beaucoup pour votre aide. Ce problème me dérange depuis des mois et je refuse de le laisser partir.

+0

J'utilise Python 2.7.3 et suis sur Mac OSX – xxmbabanexx

Répondre

3

Vous essayez de courir avant de savoir comment explorer.

Jeter le Tk et le filetage. Regardez les exemples SocketServer et exécutez-les. Travailler à partir de cela afin que vous puissiez obtenir la compréhension de base socket que vous semblez manquer.

Juste pour que vous le sachiez, les utilisateurs de StackOverflow ne vont probablement pas regarder votre code pastebin. Je l'ai regardé et c'est redondant et confus.

0

Vous envoyez les données sur la mauvaise prise - vous devez les envoyer sur la prise client, pas sur la prise d'écoute. Le schéma général d'un serveur ressemble à ceci:

# 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

Je commencerais en créant des fichiers python séparés pour le client et le serveur. S'ils vont partager des fonctions communes et que non, il suffit d'écrire un fichier common.py et de les importer dans les deux. Après avoir parcouru votre code paste-bin, la plus grosse erreur que je peux voir est que vous n'appelez pas votre fonction SERVER_LOOP.

sur la ligne 90, ajouter Discussion (target = SERVER_LOOP, args = (s,)). Start() thread serveur #start

En second lieu, le fil que vous créez sur la ligne 91 va quitter immédiatement après faire le client.send().La récupération de place Python va détruire le socket, peu importe comment vous le créez. mettre un time.sleep (5) là et envelopper client.send ("sup") dans un certain temps 1 == 1: boucle

Je vous suggère fortement de trouver un bon exemple de code sur la création d'un client TCP python et un serveur en python. Voici un bon début: http://wiki.python.org/moin/TcpCommunication

Questions connexes