Creating a new websocket connection ?

Hi,
I've decided to move away from ajax and use websockets for a project.
My starting point is the STM32-Ethernet_ServerAllFunctionsDemo using a W5500 and Blackpill F411.
The code builds ok and runs on the target, at boot up I see this from the serial port.

WebSockets Server IP address: 192.168.1.173                                 
WebSockets Server Running and Ready on BLACKPILL_F411CE              
IP address: 192.168.1.173, Port: 8080

when I connect using a browser I see this from the serial debug

Connecting wsServer: ws://192.168.1.23:8080/

but after about 30 seconds it reports failed in the browser tools window.

I suspect I have the syntax slightly wrong in this line:

var connection = "ws://192.168.1.23:8080" ;
websocket = new WebSocket(connection);

I've also tried the following

var connection = new WebSocket("ws://"+location.hostname+":8080/", ["arduino"]);

I've tried many variations of syntax some of which fail immediately and others which fail after 30 seconds or so.

These are my includes, the webpage.h contains the code which is sent to the browser - seems to get there ok. Easier to edit rather than one long line as per the example.

#include "defines.h"
#include <WebSockets2_Generic.h>
#include <EthernetWebServer_STM32.h>
#include "webpage.h"
using namespace websockets2_generic;
WebsocketsServer SocketsServer;
#define WEBSOCKETS_PORT     8080

So close but so far - any help /ideas on how to debug greatly appreciated.

Regards Tim

Ok - as usual as soon as I post a question I manage to make progess,
using this line

var connection = new WebSocket("ws://"+location.hostname + ":8080" );

Results in this from the serial port

Connecting wsServer: ws://192.168.1.23:8080/
                                                                          
HTML sent
                                                                                                             
[WS] WebsocketsServer::recvHandshakeRequest: key = Host
                                                               
[WS] WebsocketsServer::recvHandshakeRequest: value = 192.168.1.173:8080
                                               
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = host
                                                            
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = 192.168.1.173:8080
                                            
[WS] WebsocketsServer::recvHandshakeRequest: key = Connection
                                                         
[WS] WebsocketsServer::recvHandshakeRequest: value = Upgrade
                                                          
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = connection
                                                      
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = upgrade
                                                       
[WS] WebsocketsServer::recvHandshakeRequest: key = Pragma
                                                             
[WS] WebsocketsServer::recvHandshakeRequest: value = no-cache
                                                         
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = pragma
                                                          
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = no-cache
                                                      
[WS] WebsocketsServer::recvHandshakeRequest: key = Cache-Control
                                                      
[WS] WebsocketsServer::recvHandshakeRequest: value = no-cache
                                                         
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = cache-control
                                                   
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = no-cache
                                                      
[WS] WebsocketsServer::recvHandshakeRequest: key = User-Agent
                                                         
[WS] WebsocketsServer::recvHandshakeRequest: value = Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML
, like Gecko) Chrome/118.0.0.0 Safari/537.36
                                                                          
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = user-agent
                                                      
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (kh
tml, like gecko) chrome/118.0.0.0 safari/537.36
                                                                       
[WS] WebsocketsServer::recvHandshakeRequest: key = Upgrade
                                                            
[WS] WebsocketsServer::recvHandshakeRequest: value = websocket
                                                        
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = upgrade
                                                         
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = websocket
                                                     
[WS] WebsocketsServer::recvHandshakeRequest: key = Origin
                                                             
[WS] WebsocketsServer::recvHandshakeRequest: value = http://192.168.1.173
                                             
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = origin
                                                          
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = http://192.168.1.173
                                          
[WS] WebsocketsServer::recvHandshakeRequest: key = Sec-WebSocket-Version
                                              
[WS] WebsocketsServer::recvHandshakeRequest: value = 13
                                                               
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = sec-websocket-version
                                           
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = 13
                                                            
[WS] WebsocketsServer::recvHandshakeRequest: key = Accept-Encoding
                                                    
[WS] WebsocketsServer::recvHandshakeRequest: value = gzip, deflate
                                                    
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = accept-encoding
                                                 
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = gzip, deflate
                                                 
[WS] WebsocketsServer::recvHandshakeRequest: key = Accept-Language
                                                    
[WS] WebsocketsServer::recvHandshakeRequest: value = en-GB,en-US;q=0.9,en;q=0.8
                                       
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = accept-language
                                                 
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = en-gb,en-us;q=0.9,en;q=0.8
                                    
[WS] WebsocketsServer::recvHandshakeRequest: key = Sec-WebSocket-Key
                                                  
[WS] WebsocketsServer::recvHandshakeRequest: value = RbwGt6to72+nIVwH/UnW/Q==
                                         
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = sec-websocket-key
                                               
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = RbwGt6to72+nIVwH/UnW/Q==
                                      
[WS] WebsocketsServer::recvHandshakeRequest: key = Sec-WebSocket-Extensions
                                           
[WS] WebsocketsServer::recvHandshakeRequest: value = permessage-deflate; client_max_window_bits
                       
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = sec-websocket-extensions
                                        
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = permessage-deflate; client_max_window_bits
                    
Got Message: Connect Sun Oct 29 2023 18:14:21 GMT+0000 (Greenwich Mean Time)
  

But when I move a slider the browser tool reports

WebSocket is already in CLOSING or CLOSED state.

So not quite there yet .....

Edit the problem is in the main loop where the connection gets closed after each message

void loop()
{
  server.handleClient();
  client = new WebsocketsClient;
  if (client)
  {
    *client = SocketsServer.accept();  
    if (client->available())
    {
      WebsocketsMessage msg = client->readNonBlocking();  
      // log
      Serial2.print("Got Message: ");
      Serial2.println(msg.data());
  
      // return echo
      client->send("Echo: " + msg.data());
  
      // close the connection
      client->close();
    }
    delete client;
  }
}

So now I think I know the problem just a matter of how to fix it ??

Ok, I'm out of my depth (again) - I think I need some sort of handler / control to keep the connection open and pass data to / from client.
There's lots of info about how to do this using esp82 devices but not much for STM32F4 series especially as I'm using websockets2generic.
Does anyone have some sample code or other starting point to get me over this hurdle ?

Regards Tim

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.