我已经开始学习Socket编程和我面临的问题了。在两个不同的网络上我无法连接套接字(具体来说:我使用Web主机和Cgi编程来创建python套接字服务器,我的目标是使用桌面客户端python应用程序连接到该套接字) < / p>
我的服务器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 Server使用:Python 2.6.6 | | Python客户端:python 3.4 |
使用此On On同一系统(即:本地主机作为服务器和客户端工作正常)
PS:如果有任何教程,也链接,如果必须,也建议一些配置。
答案 0 :(得分:0)
Python 2和3以不同的方式处理套接字!例如,请参见此处this question。您可以做的快速解决方法是将客户端起始行更改为"#!/usr/bin/env python2.7"
以强制客户端使用python 2,这应该可以解决您的问题。
答案 1 :(得分:0)
如果您希望他们互相访问,请使用公共IP。 (Public IP Address)你还需要进行端口转发(这对每个路由器都不同,所以我无法解释,查找它)。否则,将无法从其他网络访问您要访问的端口。当您进行端口转发时,可以访问公共IP地址上的该端口。