Pages: 1 ... 4 5 [6] 7 8 ... 13   Go Down
Author Topic: Websocket [ci siamo quasi]  (Read 10648 times)
0 Members and 1 Guest are viewing this topic.
Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3280
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sono tutti in ESTABLISHED = 0x17;

Code:
Socket#0:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54436) - Status Socket :0x1
Socket#1:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54437) - Status Socket :0x1
Socket#2:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54438) - Status Socket :0x1
Socket#3:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54439) - Status Socket :0x1
onConnect called, client ID: 0

Socket#0:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54436) - Status Socket :0x1
Socket#1:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54437) - Status Socket :0x1
Socket#2:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54438) - Status Socket :0x1
Socket#3:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54439) - Status Socket :0x1
onConnect called, client ID: 1

Socket#0:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54436) - Status Socket :0x1
Socket#1:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54437) - Status Socket :0x1
Socket#2:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54438) - Status Socket :0x1
Socket#3:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54439) - Status Socket :0x1
onConnect called, client ID: 2

Socket#0:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54436) - Status Socket :0x1
Socket#1:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54437) - Status Socket :0x1
Socket#2:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54438) - Status Socket :0x1
Socket#3:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54439) - Status Socket :0x1
onConnect called, client ID: 3

Quello che resta in ascolto intendi  LISTEN = 0x14;
è sempre quello successivo a quello ESTABLISHED
« Last Edit: July 04, 2013, 04:53:50 pm by pablos » Logged

no comment

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3280
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

visualizzando passo passo alle 4 connessioni

condiz. iniziale : nessun client connesso
Code:
Socket#0:0x14 - Porta 23 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
Socket#1:0x0 - Porta 0 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
Socket#2:0x0 - Porta 0 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
Socket#3:0x0 - Porta 0 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0

connetto il primo
Code:
Socket#0:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54436) - Status Socket :0x1
Socket#1:0x0 - Porta 0 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
Socket#2:0x0 - Porta 0 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
Socket#3:0x0 - Porta 0 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
onConnect called, client ID: 0

Socket#0:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54436) - Status Socket :0x1
Socket#1:0x14 - Porta 23 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
Socket#2:0x0 - Porta 0 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
Socket#3:0x0 - Porta 0 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
onConnect called, client ID: 0
da qui si vede che il socket 2 è passato in listen

ora connetto il secondo
Code:
Socket#0:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54436) - Status Socket :0x1
Socket#1:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54437) - Status Socket :0x1
Socket#2:0x0 - Porta 0 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
Socket#3:0x0 - Porta 0 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
onConnect called, client ID: 0

Socket#0:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54436) - Status Socket :0x1
Socket#1:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54437) - Status Socket :0x1
Socket#2:0x14 - Porta 23 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
Socket#3:0x0 - Porta 0 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
onConnect called, client ID: 1
da qui si vede che il socket 3 è passato in listen

ora connetto il terzo
Code:
Socket#0:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54436) - Status Socket :0x1
Socket#1:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54437) - Status Socket :0x1
Socket#2:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54438) - Status Socket :0x1
Socket#3:0x0 - Porta 0 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
onConnect called, client ID: 0

Socket#0:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54436) - Status Socket :0x1
Socket#1:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54437) - Status Socket :0x1
Socket#2:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54438) - Status Socket :0x1
Socket#3:0x14 - Porta 23 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
onConnect called, client ID: 1
il quarto è passato in listen

ora connetto il quarto
Code:
Socket#0:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54436) - Status Socket :0x1
Socket#1:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54437) - Status Socket :0x1
Socket#2:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54438) - Status Socket :0x1
Socket#3:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54439) - Status Socket :0x1
onConnect called, client ID: 3



« Last Edit: July 05, 2013, 07:25:13 am by pablos » Logged

no comment

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3280
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

disconnetto il quarto
Code:
Socket#0:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54436) - Status Socket :0x1
Socket#1:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54437) - Status Socket :0x1
Socket#2:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54438) - Status Socket :0x1
Socket#3:0x1C - Porta 23 IP Client:192.168.2.112 Porta (54439) - Status Socket :0x3
onDisconnect called
onConnect called, client ID: 0

Socket#0:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54436) - Status Socket :0x1
Socket#1:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54437) - Status Socket :0x1
Socket#2:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54438) - Status Socket :0x1
Socket#3:0x14 - Porta 23 IP Client:192.168.2.112 Porta (54439) - Status Socket :0x0
onConnect called, client ID: 1
il quarto si porta in LISTEN

disconnetto il secondo
Code:
Socket#0:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54436) - Status Socket :0x1
Socket#1:0x1C - Porta 23 IP Client:192.168.2.112 Porta (54437) - Status Socket :0x3
Socket#2:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54438) - Status Socket :0x1
Socket#3:0x14 - Porta 23 IP Client:192.168.2.112 Porta (54439) - Status Socket :0x0
onDisconnect called
onConnect called, client ID: 2

Socket#0:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54436) - Status Socket :0x1
Socket#1:0x0 - Porta 23 IP Client:192.168.2.112 Porta (54437) - Status Socket :0x3
Socket#2:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54438) - Status Socket :0x1
Socket#3:0x14 - Porta 23 IP Client:192.168.2.112 Porta (54439) - Status Socket :0x0
onConnect called, client ID: 0
Il quarto è sempre in LISTEN

disconnetto il terzo
Code:
Socket#0:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54436) - Status Socket :0x1
Socket#1:0x0 - Porta 23 IP Client:192.168.2.112 Porta (54437) - Status Socket :0x3
Socket#2:0x1C - Porta 23 IP Client:192.168.2.112 Porta (54438) - Status Socket :0x3
Socket#3:0x14 - Porta 23 IP Client:192.168.2.112 Porta (54439) - Status Socket :0x0
onDisconnect called
onConnect called, client ID: 0

Socket#0:0x17 - Porta 23 IP Client:192.168.2.112 Porta (54436) - Status Socket :0x1
Socket#1:0x0 - Porta 23 IP Client:192.168.2.112 Porta (54437) - Status Socket :0x3
Socket#2:0x0 - Porta 23 IP Client:192.168.2.112 Porta (54438) - Status Socket :0x3
Socket#3:0x14 - Porta 23 IP Client:192.168.2.112 Porta (54439) - Status Socket :0x0
onConnect called, client ID: 0
Il quarto è sempre in LISTEN

disconnetto il primo
Code:
Socket#0:0x1C - Porta 23 IP Client:192.168.2.112 Porta (54436) - Status Socket :0x3
Socket#1:0x0 - Porta 23 IP Client:192.168.2.112 Porta (54437) - Status Socket :0x3
Socket#2:0x0 - Porta 23 IP Client:192.168.2.112 Porta (54438) - Status Socket :0x3
Socket#3:0x14 - Porta 23 IP Client:192.168.2.112 Porta (54439) - Status Socket :0x0

Socket#0:0x14 - Porta 23 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
Socket#1:0x0 - Porta 0 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
Socket#2:0x0 - Porta 0 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
Socket#3:0x0 - Porta 0 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
CLOSE_WAIT  = 0x1C;
il LISTEN = 0x14 è passato dal quarto al primo ....nessun client collegato ... e ha resettato gli ip dei client e le porte lato server e lato client

test con 4 socket connessi e disconnetto il primo
Code:
Socket#0:0x1C - Porta 23 IP Client:192.168.2.112 Porta (51598) - Status Socket :0x3
Socket#1:0x17 - Porta 23 IP Client:192.168.2.112 Porta (51599) - Status Socket :0x1
Socket#2:0x17 - Porta 23 IP Client:192.168.2.112 Porta (51603) - Status Socket :0x1
Socket#3:0x17 - Porta 23 IP Client:192.168.2.112 Porta (51604) - Status Socket :0x1

Socket#0:0x14 - Porta 23 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
Socket#1:0x0 - Porta 0 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
Socket#2:0x0 - Porta 0 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
Socket#3:0x0 - Porta 0 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
Vengono disconnessi tutti insieme con tanto di reset IP e Port, il sock 0 si mente in Listen sulla porta 23

Mi sembra che si avvicini a quello che chiedevi .... se non lo è ... qeuesto offre per ora la casa eheheheheh

bye
« Last Edit: July 07, 2013, 09:31:31 am by pablos » Logged

no comment

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3280
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se creo invece 4 server

Code:
EthernetServer server(80);
EthernetServer server1(9990);
EthernetServer server2(9991);
EthernetServer server3(9992);

setup()
  server.begin();
  server1.begin();
  server2.begin();
  server3.begin();

Lettura stato socket senza nessun client connesso
Code:
Socket#0:0x14 - Porta 80 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
Socket#1:0x14 - Porta 9990 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
Socket#2:0x14 - Porta 9991 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0
Socket#3:0x14 - Porta 9992 IP Client:0.0.0.0 Porta (0) - Status Socket :0x0

ciascun socket si mette in LISTEN con la sua porta assegnata

Hai ragione Lesto, non si possono avere 4 utenti un socket lo devo mettere in ascolto sulla porta 80 per poter ricevere connessioni da browser ma non deve essere il primo (sock 0) altrimenti al client.stop me li disconnette tutti

inoltre il primo (sock 0) non dovremmo mai usarlo tipo assegnare una porta che non verrà mai usata

es:
Code:
EthernetServer server(65000); //non usato
EthernetServer server1(9990); // utente 1 ... scambio dati
EthernetServer server2(9991); // utente 2 .. scambio dati
EthernetServer server3(80); // utente 1 e 2 accesso alla web page
« Last Edit: July 05, 2013, 02:42:06 am by pablos » Logged

no comment

0
Online Online
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

pablos, questo è un ottimo lavoro, manca solo di provare a collegare il quinto client... (mo mi picchi  smiley-mr-green )

Quote
Mi sembra che si avvicini a quello che chiedevi
direi che supera le richieste.. se mi dici da dove hai tirato fuori porte e ip le aggioungo in ethernet client che sono utili da avere lato utente delle librerie.

per la disconnessione a questo punto direi che è un bug della libreria, daltronde per come funziona(va) un problema del genere sarebbe stato difficilissimo, se non impossibile non solo da debuggare, ma da ricreare, quindi...
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3280
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

avevo già provato una quinta conn  smiley-grin ... niente il client mi dice impossibile stabilire una connessione e i socket restano tutti a 0x17
Logged

no comment

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6984
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Complimenti.
Avete proposto le modifiche per integrarle nella lib ufficiale?
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3280
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pag 2 reply 18

Avevo messo il pezzo di programma per fare il debug dei socket

ciao
Logged

no comment

0
Online Online
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Complimenti.
Avete proposto le modifiche per integrarle nella lib ufficiale?

le avevo proposte, ma poi per via del bug onConnect che veniva chiamato sempre le ho ritirate...

Se mi testate la versione attuale con la correzione del July 03, 2013, 08:05:13 pm e mi dite che l'onConnect viene chiamato solo ad ogni connessione, e connettersi disconnettersi più volte funziona rifaccio la pull-request, se poi nel frattempo iniziamo ad analizzare il bug della disconnessione lo includo.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3280
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Test socket con telnet

Code:
                                   
#include <SPI.h>
#include <Ethernet.h>
#include <Flash.h>
#include <utility/socket.h>
#include "utility/w5100.h"

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network.
// gateway and subnet are optional:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,2, 177);
//IPAddress gateway(192,168,2, 1);
//IPAddress subnet(255, 255, 255, 0);
byte sock_occ= 99;
byte point_1=0;

// telnet defaults to port 23
EthernetServer server(23);

void setup() {
  //initialize connect callback
  server.registerConnectCallback(&onConnect);
  // initialize the ethernet device
  Ethernet.begin(mac, ip);//, gateway, subnet);
  // start listening for clients
  server.begin();
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  //while (!Serial) {
   // ; // wait for serial port to connect. Needed for Leonardo only
 // }


  Serial.print("Server address:");
  Serial.println(Ethernet.localIP());
}

void loop()
{
   EthernetClient client = server.available();  
   status_sock();
  
  //-----------------test------------------
   if((sock_occ == 99) && (point_1 == 0))
   {
     Serial.println( "nessun client connesso" );
     point_1=1;
   }
   //---------------------------------------
 
  
}

void onConnect(EthernetClient &client) {
    
   point_1=0;
  Serial.print("onConnect called, client ID: ");
  Serial.println( client.getId() );
  sock_occ=client.getId() ;
  //if(client.getId()==0) Serial.println("onConnect called, client ID: 0");
   status_sock();
  //client.write();    
  //initialize connect callback for the client
  client.registerDisconnectCallback(&onDisconnect);
}

void onDisconnect(EthernetClient &socket) {
  Serial.println("onDisconnect called");
}

void status_sock()
 {
    Serial << F("\n");  
   for (int i = 0; i < MAX_SOCK_NUM; i++) {
              
Serial << F("Socket#");
Serial.print(i);
uint8_t s = W5100.readSnSR(i);
Serial << F(":0x");
Serial.print(s,16);
Serial << F(" - Porta ");
Serial.print(W5100.readSnPORT(i));
Serial << F(" IP Client:");
uint8_t dip[4];
W5100.readSnDIPR(i, dip);
for (int j=0; j<4; j++) {
  Serial.print(dip[j],10);
  if (j<3) Serial << F(".");
}
Serial << F(" Porta (");
Serial.print(W5100.readSnDPORT(i));
Serial << F(")");
                
                Serial << F(" - Status Socket ");
                uint8_t state = W5100.readSnIR(i);
                Serial << F(":0x");
                Serial.print(state,16);
                Serial << F("\n");
                
         //comand_sock();
       }
  
 }  
Logged

no comment

0
Online Online
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

problema: non vedo le chiamate ad onDisocnnect... Quindi se è il client a disconnettersi noi non ce ne accorgiamo?? uff brutta! In tal caso è tutto eseguito internamente dal wiznet.... bisogna indagare

in oltre coambia
Code:
Serial.println("onDisconnect called");
in
Code:
Serial.print("onDisconnect called: ");
Serial.println(  client.getId() );
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Online Online
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

nono forse ci sono.

In EthernetServer.cpp

cambia
Code:
if (!listening) {
    begin();
  }

in

Code:
if (!listening) {
    Serial.println("Nessun socket in ascolto, chiamo di nuovo il begin, segue lo stato socket attuale: ");
    for (int sock = 0; sock < MAX_SOCK_NUM; sock++) {
        Serial.print(sock);
        Serial.print(" ");
        Serial.print(client.status());
        Serial.print(" ");
        Serial.println(client.available());
    }
    begin();
  }
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3280
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Cè  un altro comportamento anomalo brutto brutto brutto, quando assegnamo a 4 server 4 porte dedicate le connessioni sulle porte vanno tutte a buon fine, ma quando vai a disconnettere uno dei 3 (escluso il sock 0 che come abbiamo capito li sconnette tutti) ) resta in CLOSE_WAIT  e non ne esce più, quel socket con la sua porta non è più riutilizzabile, nessuno dei 3 passa in LISTEN  smiley-eek-blue
penso si possa risolvere con server(n).begin();
« Last Edit: July 05, 2013, 05:34:05 am by pablos » Logged

no comment

0
Online Online
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

se usi l codice che ho messo sopra, potresti scoprite che il problema è client.available() che ritorna qualche valore.

comunque ci sta che devi rifare il begin, secondo me.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3280
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si appena posso faccio le modifiche.

Questi test spiegano perchè la ethernet in questi 2-3 anni si inchiodava misteriosamente e solo mettendo un begin si ovviava a questo problema
Logged

no comment

Pages: 1 ... 4 5 [6] 7 8 ... 13   Go Up
Jump to: