Пожалуйста, будьте снисходительны. Я только начинаю с розеток, и это не моя сфера деятельности.
У меня RaspberryPi, подключенный к моему рабочему столу с помощью кабеля Ethernet.RPi используется в качестве веб-сервера (установлены apache2 и PHP).С рабочего стола я могу получить доступ к веб-странице по умолчанию.Пока все хорошо.
Я создал сценарий Python на RPi, который открывает сокет и посылает через него случайное число.
import socket
import random
import time
HOST = ''
PORT = 8080
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'
try:
s.bind((HOST,PORT))
except socket.error:
print 'Bind failed'
rnd = random.random()
print rnd
s.listen(1)
print 'Socket awaiting messages'
(conn, addr) = s.accept()
print 'Connected to ' + str(addr)
while True:
rnd = random.random()
print rnd
conn.send(str(rnd))
time.sleep(1)
conn.close()
Если я выполняю этот сценарий, он зависает, пока клиентоткрыть соединение.Итак, со своего рабочего стола я открываю Firefox и набираю адрес: «192.168.137.2:8080".
В окнах Firefox ничего не происходит, за исключением того, что кажется, что браузер ожидает, что« страница »завершенапогрузка.В любом случае, с консоли на моем RPi я вижу случайные числа.Поэтому я предполагаю, что каким-то образом соединение было правильно открыто.
Любопытно, что когда я изменяю time.sleep(1)
на time.sleep(0.01)
, я также могу видеть текст, отображаемый в Firefox ... Но скажем, что этоок.
Теперь, если я создаю скрипт на Python и выполняю его с рабочего стола, я вижу, что оба скрипта работают.
import socket
HOST = "192.168.137.2"
PORT = 8080
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.connect((HOST, PORT))
print "Connected"
while True:
dat = socket.recv(1024)
print str(dat)
print "Close"
socket.close()
Пока все хорошо ... Недолго,Теперь я хочу получить значения, отправленные в сокет с JS, с веб-страницы, обслуживаемой RPi.Поэтому я создал html-файл на своем RPi
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Test</title>
</head>
<body>
<script>
var ws = new WebSocket("ws://192.168.137.2:8080/ws");
console.log("socket created");
ws.onerror = function(err){ console.log(err); };
ws.onopen = function(){ console.log("connection opened"); };
ws.onmessage = function(e){ console.log(e.data); };
ws.onclose = function(){ console.log("connection closed"); };
</script>
</body>
</html>
Если я открою эту страницу с помощью Firefox со своего рабочего стола, я получу эту ошибку (перевод на английский): Firefox не может установить соединение с сервером, если адрес ws://192.168.137.2:8080/ws.
И из RPi скрипт перестает зависать, начинает отображать несколько значений, а затем вылетает, показывая, что канал сломан.
Так что мой вопрос в том, чтоя сделал не так в html файле?Как сделать так, чтобы отображались значения в консоли?
Заранее спасибо.