【发布时间】:2022-05-03 03:24:38
【问题描述】:
我正在尝试通过 python 中的套接字编程从我的手机向我的笔记本电脑发送一条简单的消息。我在笔记本电脑上使用win 10 和python 3.7.4。我也在termux 上运行python 3.9.0。
并且笔记本电脑已连接到手机的热点。
我的 server.py 是:
import threading
import os
class Server:
def __init__(self):
self.s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.accept_connections()
def accept_connections(self):
ip = socket.gethostbyname(socket.gethostname())
port = int(input('Enter desired port --> '))
self.s.bind((ip,port))
self.s.listen(100)
print('Running on IP: '+ip)
print('Running on port: '+str(port))
while 1:
c, addr = self.s.accept()
print(c)
threading.Thread(target=self.handle_client,args=(c,addr,)).start()
def handle_client(self,c,addr):
data = c.recv(1024).decode()
if not os.path.exists(data):
c.send("file-doesn't-exist".encode())
else:
c.send("file-exists".encode())
print('Sending',data)
if data != '':
file = open(data,'rb')
data = file.read(1024)
while data:
c.send(data)
data = file.read(1024)
c.shutdown(socket.SHUT_RDWR)
c.close()
server = Server()
我的 client.py 是:
import socket
import os
class Client:
def __init__(self):
self.s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.connect_to_server()
def connect_to_server(self):
self.target_ip = input('Enter ip --> ')
self.target_port = input('Enter port --> ')
self.s.connect((self.target_ip,int(self.target_port)))
self.main()
def reconnect(self):
self.s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.s.connect((self.target_ip,int(self.target_port)))
def main(self):
while 1:
file_name = input('Enter file name on server --> ')
self.s.send(file_name.encode())
confirmation = self.s.recv(1024)
if confirmation.decode() == "file-doesn't-exist":
print("File doesn't exist on server.")
self.s.shutdown(socket.SHUT_RDWR)
self.s.close()
self.reconnect()
else:
write_name = 'from_server '+file_name
if os.path.exists(write_name): os.remove(write_name)
with open(write_name,'wb') as file:
while 1:
data = self.s.recv(1024)
if not data:
break
file.write(data)
print(file_name,'successfully downloaded.')
self.s.shutdown(socket.SHUT_RDWR)
self.s.close()
self.reconnect()
client = Client()
我的问题是,当我在手机上运行server.py 和在笔记本电脑上运行client.py 时,我得到了
ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it
当我在笔记本电脑上运行server.py 和在手机上运行client.py 时,我得到TimeoutError: [Errno 110] Connection timed out
***笔记本电脑上没有杀毒软件,Windows Defender 已停用
*** 我的手机上也没有安装任何类型的网络安全软件(但我不确定是否有任何类型的预装应用程序)
*** 我的防火墙也被禁用了。
【问题讨论】:
-
@fireball.1 tnx 供您发表评论,我的防火墙已禁用,我没有使用端口 100。我正在使用随机的东西,例如
12345或8080
标签: python android python-3.x sockets