Intereting Posts
C: поместите инструкции x86 в массив и выполните их Как заменить текст на конкретное местоположение файла, передав аргумент через аргумент командной строки Android NDK: пользовательская assembly WebView из источника Как создать поведение ipairs (в противоположность парам) в API C Определение строки неизвестной длины Почему в структуре нет прописных элементов только для членов типа «char»? Обнаружение отсутствующего __declspec (dllimport) в доступе к экспортированным глобальным переменным через границы dll Проблема при изменении указателя внутри функции C Как передать 2D-массив указателем в C? Открытые сборки Watcom Inline Операторы SEG и OFFSET C перед mainCRTStartup на Mingw? Почему разрешено перезаписывать переменную const с помощью указателя на нее с помощью memcpy? Как нарисовать заполненный круг? Выделение массива char с помощью malloc Ошибка компилятора C (арифметика с плавающей запятой)?

Соединение с Websocket продолжает досрочно закрывать соединение

Итак, я пытаюсь создать приложение C, которое функционирует как сервер Websockets. Здесь есть много связанных вопросов, но ни один из них, похоже, не может помочь с этой проблемой. Программа может первоначально установить соединение, чтобы завершить рукопожатие для веб-узла успешно, однако, похоже, не может поддерживать соединение открытым. На стороне клиента я получаю ошибку

WebSocket.js: 7605 Ошибка при сбоях: попытка отправить сообщение на нераскрытом или закрытом WebSocket в _8b2.window.WebSocket._8d2.send (WebSocket.js: 7605) по индексу: 34

всякий раз, когда я пытаюсь использовать функцию send () в соединении с веб-сервером на стороне клиента. А также это дает мне ошибку

Соединение WebSocket с ‘ws: //127.0.0.1: 5959 /? .Kl = Y’ не выполнено: WebSocket закрыт до установления соединения.

Вот исходный код сервера:

int new_socket; int activity; int i; int sd; int max_sd; int bytes_read; fd_set readfds; int master_socket; noPollConn* new_conn; /*Create no poll context*/ noPollCtx* ctx = nopoll_ctx_new(); noPollConn* conn; char buffer[3000]; /*Create a connection listener at 127.0.0.1 (loopback) on port 5959*/ noPollConn * listener = nopoll_listener_new(ctx, "127.0.0.1","5959"); /*Get the socket of the lister*/ master_socket = nopoll_conn_socket(listener); if(!nopoll_conn_is_ok(listener)) { perror("There was an error creating the listener!\n"); exit(EXIT_FAILURE); } puts("Waiting for connections ..."); while(TRUE){ printf("Start of the while loop\n"); FD_ZERO(&readfds); FD_SET(master_socket, &readfds); max_sd = master_socket; printf("The number of connections is %i\n",cons); for (i = 0 ; i  0) FD_SET(sd,&readfds); if(sd > max_sd) max_sd = sd; } printf("The max fd is %i\n",max_sd); activity = select(max_sd + 1 , &readfds , NULL , NULL , NULL); if ((activity < 0) && (errno!=EINTR)) { puts("select error"); exit(EXIT_FAILURE); } if (FD_ISSET(master_socket, &readfds)){ new_conn = nopoll_conn_accept(ctx,listener); puts("Waiting for the connection to be ready"); nopoll_conn_is_ready(conn); /*Vector is actually a doubly linked list*/ vector_push(&clients,new_conn); cons++; } /*TODO: Implement disconnect*/ for (i = 0; i  %s\n",buffer); } } memset(buffer,0,3000); } 

Просто предупреждение, хотя этот код действительно идет в бесконечном цикле прямо сейчас, поскольку я не реализовал отключение от клиента на стороне сервера.

 For the client 
 var connection = new WebSocket('ws://127.0.0.1:5959'); connection.onopen = function(){ connection.send("TEST"); alert("Connected"); } connection.onerror = function(error){ console.log('Error detected: ' + error); } connection.onmessage = function (event) { alert(event.data); } connection.close(); 

Может быть, мне не хватает чего-то очень важного? Я прошел много учебников, и я не могу понять, в чем проблема. Любая помощь очень ценится! Вызов .send() в функции .onopen() приводит к ошибке:

Соединение WebSocket с ‘ws: //127.0.0.1: 5959 /? .Kl = Y’ не выполнено: WebSocket закрыт до установления соединения. ОБНОВИТЬ
Ошибка на стороне сервера. Это может быть связано с тем, что я обрабатываю соединение, как если бы это был сокет в некоторых отношениях в коде C.

    Если на сервере не регистрируются ошибки, проблема может быть .send() перед open события. Вызовите .send() в обработчике open событий. В остальном проблема на сервере.

     const socket = new WebSocket("ws://echo.websocket.org/"); socket.onopen = function(e) { socket.send("WebSocket rocks"); console.log("self.socket event.type:", e.type); }; socket.onmessage = function(e) { console.log(e.data); }; socket.onerror = function(e) { console.log("self.socket error", e); }; socket.onclose = function(e) { console.log("self.socket event.type", e.type); }; 

    См. Как проверить мой WebSocket, который разработан в JavaScript

    plnkr http://plnkr.co/edit/W8Wgyw0mbxdMkMMe4wg4?p=preview