2016-06-09 103 views
0

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

我的服务器COAD:位置的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:/桌面

#!/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:另外链接,如果有任何这教程,也奉劝一些配置,如果必须进行。

+0

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

回答

0

Python 2和3不同地处理套接字!例如,请参阅this question。作为一种快速解决方法,您可以做的是将您的客户端启动线更改为"#!/usr/bin/env python2.7"以强制客户端使用python 2,以便解决您的问题。

+0

错误,不,他们不。您链接的问题显示文本编码的处理方式不同(如果您尝试发送文本,可能会产生影响)。但是这与他的“连接超时”错误无关,无论如何都会发送任何事情。 – spectras

+0

啊好的!你确定你的网络设置允许你在这两台机器之间进行通信吗?例如,你可以通过编程方式连接到从你的客户端计算机说谷歌吗?您的服务器是否对该端口上的ping进行响应? – VBB

+0

我已经打开Windows防火墙并重试。这次也不工作。服务器端是否有配置?我正在使用SSH在服务器上运行ServerSocket.py。 – amitnair92

0

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