为什么 Python Socket 只能在本地网络上工作?
Why Python Socket works only on local network?
我正在尝试通过 Python 套接字发送文本文件,它可以工作,但只能在本地网络上使用。这是为什么?(我正在使用 Python 3.6)
这是 server.py:
import socket
HOST = '0.0.0.0'
PORT = 80
ADDR = (HOST,PORT)
BUFSIZE = 4096
print(socket.gethostbyname(socket.gethostname()))
serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serv.bind(ADDR)
serv.listen(5)
print ('listening ...')
while True:
conn, addr = serv.accept()
print ('client connected ... ', addr)
myfile = open('asd.txt', 'w')
while True:
data = conn.recv(BUFSIZE)
if not data: break
myfile.write(data.decode("utf-8"))
print ('writing file ....')
myfile.close()
print ('finished writing file')
conn.close()
print ('client disconnected')
这是client.py:
import socket
HOST = '192.168.2.109'
PORT = 80
ADDR = (HOST,PORT)
BUFSIZE = 4096
textfile = "C:/Users/Public/asd.txt"
bytes = open(textfile, "r").read()
print (len(bytes))
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect_ex(ADDR)
client.send(bytes.encode())
client.close()
我试过了,它在本地网络上工作,但是当我把客户端发给我的朋友尝试时,它只是打印出字节但没有连接到我的服务器。(服务器是 运行 在我的电脑上)
如果客户端和主机连接到同一个网络(LAN),即通过同一个路由器或热点,那么上面的代码将起作用。如果你想做类似的事情,运行 server.py
在连接到你的 WiFi 的 PC 上和 运行 client.py
在通过加密狗连接的笔记本电脑上你将不得不使用 port-forwarding
.
我正在尝试通过 Python 套接字发送文本文件,它可以工作,但只能在本地网络上使用。这是为什么?(我正在使用 Python 3.6) 这是 server.py:
import socket
HOST = '0.0.0.0'
PORT = 80
ADDR = (HOST,PORT)
BUFSIZE = 4096
print(socket.gethostbyname(socket.gethostname()))
serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serv.bind(ADDR)
serv.listen(5)
print ('listening ...')
while True:
conn, addr = serv.accept()
print ('client connected ... ', addr)
myfile = open('asd.txt', 'w')
while True:
data = conn.recv(BUFSIZE)
if not data: break
myfile.write(data.decode("utf-8"))
print ('writing file ....')
myfile.close()
print ('finished writing file')
conn.close()
print ('client disconnected')
这是client.py:
import socket
HOST = '192.168.2.109'
PORT = 80
ADDR = (HOST,PORT)
BUFSIZE = 4096
textfile = "C:/Users/Public/asd.txt"
bytes = open(textfile, "r").read()
print (len(bytes))
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect_ex(ADDR)
client.send(bytes.encode())
client.close()
我试过了,它在本地网络上工作,但是当我把客户端发给我的朋友尝试时,它只是打印出字节但没有连接到我的服务器。(服务器是 运行 在我的电脑上)
如果客户端和主机连接到同一个网络(LAN),即通过同一个路由器或热点,那么上面的代码将起作用。如果你想做类似的事情,运行 server.py
在连接到你的 WiFi 的 PC 上和 运行 client.py
在通过加密狗连接的笔记本电脑上你将不得不使用 port-forwarding
.