Python sockets file transfer

0

Witam, przechodząc do sedna:

# server.py
import socket
import random
import sys

host = '83.5.XXX.XX' # Globalne IP
port = 48980
s = socket.socket()
s.bind((host, port))
s.listen(1)

print( 'Server listening on ' + host+':'+str(port) + ' ...' )
print( '=======================================' )

while 1: 
	conn, addr = s.accept()
	print( 'Got connection from', addr )
	
	filename = str(addr) + '-' + str(random.randint(10000, 99999))
	print( 'Filename:', filename )
	
	with open('dump/'+filename, 'wb') as f:
		print( 'File opened.' )
		size = 0
		while 1:
			sys.stderr.write('\rReceiving data...\t\t' + str(size) )
			data = conn.recv(1024)
			if not data:
				break
			f.write(data)
			size += int(sys.getsizeof(data))
	f.close()
	conn.close()
	print("\n>>> Success <<<")
	print( '=======================================' )
# client.py

import socket

s = socket.socket()
host = '83.5.XXX.XX' # Globalne IP servera
port = 48980

s.connect((host, port))
print( 'Connected to '+host+':'+str(port))

with open('file.txt', 'rb') as f:
	print('File opened.')
	data = f.read(1024)
	while data:
		print( "\rsending file..."
		s.send(data)
		data = f.read(1024)

f.close()
s.close()
print("\n>>> Success <<<")

Output server.py:
socket.error: [Errno 10049] The requested address is not valid in its context

*Skrypt działa jeżeli będe działał w sieci lokalnej (IP lokalne + 2 komputery)
*Porty są przekierowane poprawnie (48980 (TCP/UDP) => Komputer)

W takim razie moje pytanie:
Co zrobić, aby skrypt działał na IP globalnym ? :<

Dziękuje za odpowiedzi + przepraszam za wszelkie błędy (ort / kod / inne) :(

0

To wyglda na błąd podczas binda.

Niech zgadnę, Twoja topologia wygląda tak:

|Internet| <--> |Router: ip: '83.5.XXX.XX'| <--> |server: ip: 192.168.X.X albo inny|

Skonfigurowałeś NAT by wystawił jakiś konkretny port dla tego serwera. I odpalasz program na serwerze używając ip routera? Jeżeli zgadłem (z powodu za małej ilości informacji pewien być nie mogę) to nic dziwnego, że nie działa. Serwer nie ma interfejsu korespondującego z takim adresem ip. Skąd ma wiedzieć, na którym interfejsie ma słuchać?

Jeżeli się mylę proszę podaj więcej szczegółów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1