#python #android #python-3.x #sockets
#python #Android #python-3.x #сокеты
Вопрос:
Я пытаюсь отправить простое сообщение со своего мобильного на свой ноутбук с помощью программирования сокетов на python. Я использую win 10
and python 3.7.4
на своем ноутбуке. Я также продолжаю работать python 3.9.0
termux
.
и ноутбук подключен к точке доступа мобильного телефона.
мой 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 неактивен
*** Я также не установил на свой мобильный телефон какое-либо программное обеспечение для сетевой безопасности (но я не уверен, есть ли какое-либо предустановленное приложение)
*** также мой брандмауэр отключен.
Комментарии:
1. @fireball.1 tnx за ваш комментарий, моя пожарная стена отключена, и я не использую порт 100. Я использую что-то случайное, например
12345
, или8080
Ответ №1:
если вы делаете это через Интернет, а не локально, вам необходимо открыть порт маршрутизатора