Python SOCK_STREAM через интернет
У меня есть простые программы для сокета клиента и сервера не работает через Интернет
# Echo server program
import socket
import ImageGrab
HOST = '' # Symbolic name meaning all available interfaces
PORT = 3000 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
data = conn.recv(1024)
print data
conn.close()
# Echo client program
import socket
import ImageGrab
#destnation ip
HOST = '127.0.0.1' # The remote host
PORT = 3000 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send('Hello rushikesh')
s.close()
print 'Received'#, repr(data)
Когда мы пытаемся заставить его работать через Интернет, он не может подключиться. Программа показана, как указано выше, единственное, что IP-адрес назначения заменяет IP-адрес моих друзей.
При работе через localhost он работает отлично, но не работает через интернет...
Я написал программу, используя SOCK_DGRAM
он работает через Интернет только для небольших порций данных. Я хочу передать изображение, используя его, поэтому я написал его с помощью SOCK_STREAM
для передачи изображения, которое успешно работает на локальном хосте и не работает через Интернет. Так что я написал простейшую программу, но все еще показывая ту же проблему
Может кто-нибудь, пожалуйста, проведите меня через это...
1 ответ
У вас правильный подход, но вы, вероятно, сталкиваетесь с проблемами сети или брандмауэра. В зависимости от конфигурации сети вашего друга, он может находиться за NAT или межсетевым экраном, который не позволяет вам установить прямое соединение с его компьютером.
Чтобы устранить половину проблемы, вы можете использовать telnet
как клиент, чтобы установить простое соединение с сервером, чтобы увидеть, доступен ли он:
telnet 127.0.0.1 3000
Если telnet
успешно соединяется, значит сеть работает. Если это не помогает, значит, что-то не так (и может дать вам информацию, которая может помочь выяснить, что именно).