为什么Python Socket只能在本地网络上运行?

时间:2018-01-20 18:37:00

标签: python python-3.x sockets networking python-sockets

我正在尝试发送一个文本文件trhough 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()

我已经尝试了这个并且它在本地网络上工作,但当我发送给我的朋友客户端尝试它时,它只打印出字节但没有连接到我的服务器。(服务器在我的网络上运行PC)

1 个答案:

答案 0 :(得分:1)

如果客户端和主机通过相同的路由器或热点连接到同一网络(LAN),则上述代码将起作用。如果您想要执行类似操作,请在连接到WiFi的PC上运行server.py并在通过加密狗连接的笔记本电脑上运行client.py,您必须使用port-forwarding