WiFi Stop to Work after a bit

Good Morning,
is there someone that can help me with this ? I've the connection that stop to work after a fews times

/*
  WiFi Web Server

 A simple web server that shows the value of the analog input pins.
 using a WiFi shield.

 This example is written for a network using WPA encryption. For
 WEP or WPA, change the WiFi.begin() call accordingly.

 Circuit:
 * WiFi shield attached
 * Analog inputs attached to pins A0 through A5 (optional)

 created 13 July 2010
 by dlf (Metodo2 srl)
 modified 31 May 2012
 by Tom Igoe

 */

#include <SPI.h>
#include <WiFi101.h>
#include <WiFiUdp.h>


char ssid[] = "Gnux2";      //  your network SSID (name)
char pass[] = "Ab123456";   // your network password

//byte test;
int keyIndex = 0;                 // your network key Index number (needed only for WEP)

byte mac[6];                     // the MAC address of your Wifi shield
byte messaggio[28];         // mex to send out for registration
String test ;
int status = WL_IDLE_STATUS;
int i = 0;
int k = 0;

WiFiUDP Udp;

WiFiServer server(1337);



unsigned int localPort = 21;      // local port to listen on

char packetBuffer[255]; //buffer to hold incoming packet

//Dichiarazione di funzione che punta all'indirizzo zero
void(* Riavvia)(void) = 0;

void setup() {
  //Initialize serial and wait for port to open:

  Serial.begin(9600);
  pinMode(9, OUTPUT);      // set the LED pin mode
  
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue:
    while (true);
  }

  // attempt to connect to WiFi network:
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);

    // wait 10 seconds for connection:
    delay(10000);
  }
  server.begin();
  // you're connected now, so print out the status:
  printWiFiStatus();
  
   Udp.begin(21);

}


void loop() {
  i++;
  k++;
  // listen for incoming clients
  WiFiClient client = server.available(); 
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("
");
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);

    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }
 
    if (i > 700000){
      
     SendMessageBroadCast();
      i=0;
      //Serial.println("MAnda mes");
     }
}


void printWiFiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  
  
  // print the received signal strength:
  long rssi = WiFi.RSSI();
  
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
  
  if (rssi >= -67 ){
    Serial.println("Perfect Signal Signal - greem led");
    }
  else if (rssi >= -80 && rssi <= -67){
    Serial.println("Normal Signal - Yellow Led");
    }
  else if (rssi < -90){
    Serial.println("Bad Signal - Red Led");
    }
  // print where to go in a browser:
  Serial.print("To see this page in action, open a browser to http://");
  Serial.println(ip);

  WiFi.macAddress(mac);
  Serial.print("MAC: ");
  Serial.print(mac[5]);
  Serial.print(":");
  Serial.print(mac[4]);
  Serial.print(":");
  Serial.print(mac[3]);
  Serial.print(":");
  Serial.print(mac[2]);
  Serial.print(":");
  Serial.print(mac[1]);
  Serial.print(":");
  Serial.println(mac[0]);
    messaggio[0]= 0;
    messaggio[1]= 0;
    messaggio[2]= 0;
    messaggio[3]= 0;
    messaggio[4]= mac[5] >> 4;
    messaggio[5]= 0;
    messaggio[6]= mac[5] & 0xF;
    messaggio[7]= 0;
    messaggio[8]= mac[4] >> 4;
    messaggio[9]= 0;
    messaggio[10]= mac[4] & 0xF;
    messaggio[11]= 0;
    messaggio[12]= mac[3] >> 4;
    messaggio[13]= 0;
    messaggio[14]= mac[3] & 0xF;
    messaggio[15]= 0;
    messaggio[16]= mac[2] >> 4;
    messaggio[17]= 0;
    messaggio[18]=  mac[2] & 0xF;
    messaggio[19]= 0;
    messaggio[20]= mac[1] >> 4;
    messaggio[21]= 0;
    messaggio[22]= mac[1] & 0xF;
    messaggio[23]= 0;
    messaggio[24]= mac[0] >> 4;
    messaggio[25]= 0;
    messaggio[26]= mac[0] & 0xF; 
    //messaggio[27]= '\n';
    
     
}



void SendMessageBroadCast(){
    Udp.beginPacket("255.255.255.255", 21);
    Udp.write(messaggio, 115);
    Udp.endPacket();  
}



void ReconnectWiFi(){
  
while ( status != WL_CONNECTED) {
    Serial.print("Reconnect to SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);

    // wait 10 seconds for connection:
    delay(10000);
  }
 // server.begin();

  
}

Thanks
Andrea

That's not a lot of information to go on, but a 12V external power supply appears to have solved the majority of my stability problems for an original WiFi shield mounted on an Arduino Due.

I posted a longer reply to the topic: Wifi Shield stops sending after sometime
I think that is in this same forum.