【问题标题】:Python : How to connect socket on different networkPython:如何在不同的网络上连接套接字
【发布时间】:2016-10-09 13:42:32
【问题描述】:

我已经开始学习套接字编程,我面临的问题是。在两个不同的网络上时我无法连接套接字(具体来说:我正在使用 Web 主机和 Cgi 编程来创建 python 套接字服务器,我的目标是使用桌面客户​​端 python 应用程序连接到该套接字)

我的服务器代码:位置 Public_html/cgi-bin/serverSocket.py

#!/usr/bin/python
print "Content-type: text/html\n\n";

import cgitb
import socket


cgitb.enable()

def main():
    host = 'localhost'
    port = 8111

    s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        s.bind((host,port))
    except socket.error as e:
        print(str(e))

    s.listen(10)
    c,addr = s.accept()
    print("Connection From : " + str(addr))
    while True:
        data = c.recv(1024)
        if not data:
            break
        print ("From Connected user : " + str(data.decode()))
        data =str(data.decode()).upper()
        print ("sending :" + str(data))

        c.send(data.encode())

if __name__ == '__main__':
    main()

和客户端程序:位置在我的本地计算机 C:/Desktop

#!/usr/bin/python
print "Content-type: text/html\n\n";


#Client Socket Program

import socket

def main():
    host = 'www.mywebsite.com'
    port = 8111

    s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)    
    try:
        s.connect((host,port))
    except socket.error as e:
        print(str(e))

    message=input("-> ")
    while message != 'q':

        s.send(message.encode())
        print("Sent Message")
        data=s.recv(1024)
        print('Recieved from server :',  str (data.decode()))
        message=input("->")
    s.close()


if __name__ == '__main__':
    main()

| 遇到的错误是:[WinError 10060] | | Python 服务器使用:Python 2.6.6 | | Python 客户端:python 3.4 |

在同一系统上使用此(即:本地主机作为服务器和客户端工作正常)

PS:如果有这方面的教程,也可以链接,如果必须进行一些配置,请提供一些建议。

【问题讨论】:

  • 您是否尝试使用其他工具(例如 netcat)从本地计算机进行连接?它可能只是阻止传入连接的防火墙。

标签: python sockets networking server client


【解决方案1】:

如果您希望它们相互访问,请使用公共 IP。 (Public IP Address) 您还需要进行端口转发(每个路由器都不同,所以我无法解释,请查一下)。否则,您要访问的端口将无法从其他网络访问。当您进行端口转发时,您的公共 IP 地址上的该端口就可以被访问。

【讨论】:

  • 如果有人使用 TCP 隧道,例如恩格罗克?在这种情况下是否也需要端口转发?
【解决方案2】:

Python 2 和 3 处理套接字的方式不同!例如,请参见此处this question。作为一种快速解决方法,您可以将客户端起始行更改为 "#!/usr/bin/env python2.7" 以强制客户端也使用 python 2,这应该可以解决您的问题。

【讨论】:

  • 错误,不,他们没有。您链接的问题表明文本编码的处理方式不同(如果您尝试发送文本可能会产生影响)。但这与他的“连接超时”错误无关,该错误发生在任何东西都可以发送之前。
  • 啊好吧!您确定您的网络设置允许您在这两台机器之间进行通信吗?例如,您可以通过您的客户端计算机以编程方式连接到 google 吗?您的服务器是否响应该端口上的 ping?
  • 我已关闭 Windows 防火墙并再次尝试。这次也不行。服务器端是否有任何配置?我正在使用 SSH 在服务器上运行 ServerSocket.py。
猜你喜欢
  • 2021-10-13
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
  • 2014-06-16
  • 2016-02-03
相关资源
最近更新 更多