Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 套接字无法连接_Python_Sockets_Python 2.7 - Fatal编程技术网

Python 套接字无法连接

Python 套接字无法连接,python,sockets,python-2.7,Python,Sockets,Python 2.7,问题 如何修复我的程序,使其始终连接套接字?另外,请测试您的代码。关于这一点,我已经看到了很多答案,但没有一个是有效的 非常感谢你的帮助 背景 一段时间以来,我一直在开发一个通过局域网发送消息的程序。我一直在努力将我对GUI和套接字的知识集成到这个项目中。但是,不管我怎么做,插座都无法保持连接 ,但无论如何,我都无法找到正确的修复方法。我相信这是我的错——我是自学成才的,可能没有提出正确的问题。这一次,我选择了一个笼统的陈述;请原谅我缺乏技巧,但这似乎是目前为止最好的方法。我在下面列出了最有可能

问题

如何修复我的程序,使其始终连接套接字?另外,请测试您的代码。关于这一点,我已经看到了很多答案,但没有一个是有效的

非常感谢你的帮助

背景

一段时间以来,我一直在开发一个通过局域网发送消息的程序。我一直在努力将我对GUI和套接字的知识集成到这个项目中。但是,不管我怎么做,插座都无法保持连接

,但无论如何,我都无法找到正确的修复方法。我相信这是我的错——我是自学成才的,可能没有提出正确的问题。这一次,我选择了一个笼统的陈述;请原谅我缺乏技巧,但这似乎是目前为止最好的方法。我在下面列出了最有可能出现问题的部分

错误消息

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

非常感谢你的帮助。这个问题困扰了我好几个月,我拒绝让它过去。

在你还不知道如何爬行之前,你就想跑

扔掉Tk和线程。查看示例并运行它们。从这一点出发,您可以获得您似乎缺乏的基本套接字理解


正如你所知,StackOverflow的人不太可能去看你的pastebin代码。我确实看过了,它是多余的,令人困惑的。

在你知道如何爬行之前,你正在尝试跑步

扔掉Tk和线程。查看示例并运行它们。从这一点出发,您可以获得您似乎缺乏的基本套接字理解


正如你所知,StackOverflow的人不太可能去看你的pastebin代码。我确实看过了,它是多余的,令人困惑的。

您在错误的套接字上发送数据,您需要在客户端套接字上发送数据,而不是在侦听套接字上。服务器的常规模式如下所示:

# 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()

您在错误的套接字上发送数据,您需要在客户端套接字而不是侦听套接字上发送数据。服务器的常规模式如下所示:

# 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()

首先,我将为客户端和服务器创建单独的python文件。如果它们要共享公共函数什么的,只需编写一个common.py文件并将它们同时导入

在浏览了粘贴bin代码之后,我看到的最大错误是没有调用SERVER\u循环函数

在第90行,添加 线程(target=SERVER_循环,args=(s,).start()#启动服务器线程

其次,您在第91行创建的线程将在执行client.send()之后立即退出。Python垃圾收集将破坏套接字,无论您如何创建它。在其中放入time.sleep(5),并在while1==1:loop中包装client.send(“sup”)


我强烈建议您找到一些关于在python中创建python TCP客户机和服务器的好示例代码。这是一个很好的开始:

我将首先为客户机和服务器创建单独的python文件。如果它们要共享公共函数什么的,只需编写一个common.py文件并将它们同时导入

在浏览了粘贴bin代码之后,我看到的最大错误是没有调用SERVER\u循环函数

在第90行,添加 线程(target=SERVER_循环,args=(s,).start()#启动服务器线程

其次,您在第91行创建的线程将在执行client.send()之后立即退出。Python垃圾收集将破坏套接字,无论您如何创建它。在其中放入time.sleep(5),并在while1==1:loop中包装client.send(“sup”)


我强烈建议您找到一些关于在python中创建python TCP客户机和服务器的好示例代码。这是一个好的开始:

我在Mac OSX上使用Python 2.7.3和am,在Mac OSX上使用Python 2.7.3和am