java скрипт websocket не может подключиться к python serveur - PullRequest
0 голосов
/ 24 февраля 2020

Я хочу, чтобы serveur подключался и отправлял данные на python serveur, но, к сожалению, у меня есть эта ошибка SCRIPT12029: SCRIPT12029: WebSocket Error: Network Error 12029, Я видел на этом сайте Подключение к TCP-сокету из браузера с помощью javascript в второй пост, когда он говорит Вы также можете попытаться использовать HTML5 веб-сокеты (хотя это не прямое соединение TCP): , так что это java скрипт html код

<!DOCTYPE html>
<html>
<head>
    <title>JS #0</title>
</head>
<body>
    <script>
        try{
            var connection = new WebSocket('ws://127.0.0.1:1555');

            connection.onopen = function () {
                connection.send('Ping'); // Send the message 'Ping' to the server
            };
        }catch(Exception){
        }
                </script>
</body>
</html>

python

# coding: utf-8

import socket

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
a=1
if(a==1):
    try:

        socket.bind(('', 1555))


        socket.listen(5)
        print("client start")
        client, address = socket.accept()
        print ("{} connected".format( address ))

        response = client.recv(255)
        if response != "":
                print(response)
    except Exception as e:
        print(e)
    finally:
        socket.close()

Вторая попытка

#!/usr/bin/env python

# WS server that sends messages at random intervals

import asyncio
import datetime
import random
import websockets

async def time(websocket, path):
    while True:
        now = datetime.datetime.utcnow().isoformat() + "Z"
        await websocket.send(now)
        await asyncio.sleep(random.random() * 3)

start_server = websockets.serve(time, "127.0.0.1", 5678)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

и код html

<!DOCTYPE html>
<html>
    <head>
        <title>WebSocket demo</title>
    </head>
    <body>
        <script>
            var ws = new WebSocket("ws://127.0.0.1:5678/"),
                messages = document.createElement('ul');
            ws.onmessage = function (event) {
                var messages = document.getElementsByTagName('ul')[0],
                    message = document.createElement('li'),
                    content = document.createTextNode(event.data);
                message.appendChild(content);
                messages.appendChild(message);
            };
            document.body.appendChild(messages);
        </script>
    </body>
</html>

я сделал неправильно или это неправильный код, я нашел код на этом сайте https://websockets.readthedocs.io/en/stable/intro.html

новая фотография ошибки с Microsoft edge. error Microsoft edge picture

конфигурация с: flags image второй пост ответа веб-сайта дать в awnser image 1 menu setting imag2 setting Автоматизация детектора le reseau интранет = автоматически d определить сеть anet сеть

1 Ответ

0 голосов
/ 25 февраля 2020

Не самый лучший ответ в мире, но, надеюсь, это поможет вам!

Браузеры не поддерживают необработанные сокеты, но поддерживают один конкретный c протокол сокетов, WebSockets, WebSockets построены на основе TCP / IP и являются отличным и простым способом создания долговременных соединений между браузером и другим компьютером. Поскольку ваш код изначально использовал необработанные сокеты, браузер никогда не собирался выполнять рукопожатие. Теперь, когда вы изменили свой ответ на поддержку веб-сокетов, вы стали ближе, чем когда-либо!

Я не уверен, с какой проблемой вы столкнулись с новым кодом, потому что он отлично работает для меня. Я сделал несколько модификаций, так как я использую множество сред разработки и не могу мешать отладке StackExchange. Вот мой код, который имеет только 3 измененные строки от вашего:

<!DOCTYPE html>
<html>
  <head>
    <title>WebSocket demo</title>
  </head>
  <body>
    <script>
      var ws = new WebSocket('ws://127.0.0.1:5678/'),
        messages = document.createElement('ul');
      ws.onmessage = function(event) {
        var messages = document.getElementsByTagName('ul')[0],
          message = document.createElement('li'),
          content = document.createTextNode(event.data);
        message.appendChild(content);
        messages.appendChild(message);
      };
      document.body.appendChild(messages);
    </script>
  </body>
</html>

#!/usr/bin/env python3

# WS server example
import sys
# forcibly adding a path for the following libraries
# this is probably not necessary on anyone else's machine,
# but I need it just for testing this answer
sys.path.append('/usr/local/lib/python3.7/site-packages')
import asyncio
import websockets
import datetime
import random

async def time(websocket, path):
    while True:
        now = datetime.datetime.utcnow().isoformat() + "Z"
        await websocket.send(now)
        await asyncio.sleep(random.random() * 3)

start_server = websockets.serve(time, "127.0.0.1", 5678)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

И он прекрасно работает: Screenshot showing how well your code is working!

Я сохранил ваш Сценарий python как foo.py и документ html как bar.html на мой рабочий стол. Чтобы запустить сервер python, я запустил python3 foo.py из командной строки, а затем открыл файл html с помощью предпочитаемого браузера, для этого примера не требовались http-серверы.

Какие ошибки Вы видите в браузере или консоли, которые запрещают это работать?

Ошибка 12029 - это ошибка, которую видит OP! По умолчанию Edge не будет прослушивать локальные интерфейсы, например localhost и 127.0.0.1. В этой теме на Microsoft.com есть несколько советов по устранению неполадок для разработчиков, использующих Edge. Дайте нам знать, если эти конфигурации полезны.

...