ethernet shield "hangs"

hi. i've been working with the ethernet shield to make a web interface that can control several relays. I have followed all the steps here: Getting hands on Arduino Ethernet Shield - Do It Easy With ScienceProg

The web interface “hangs” and doesn’t load when I plug it up to an actual relay. However, everything loads fine when the relay is not plugged in. I am using the KTA-223 “relayduino” (KTA-223 USB/RS485 Relay IO Board - DEV-09526 - SparkFun Electronics) to control light bulbs via the same concept. Any help would be great.

#include <SPI.h>

#include <String.h>
#include <Ethernet.h>
/*
	Simple Ethernet Test

        Arduino server outputs simple text to browser

	The circuit:
	* Arduino Duemilanove
        * Arduino Ethernet shield
        * Basic FTDI breakout 5V
        *LED connected to GND and digital pin 4 via resistor
	
        By Minde
	http://www.sciencprog.com/
*/

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 192,168,0,2 };
byte gateway[] = { 192,168,0,1 };
byte subnet[] = { 255,255,255,0 };
//byte ip[] = { 216, 96, 251, 231 };			// ip in lan
//byte gateway[] = { 192, 168, 1, 1 };			// internet access via router
//byte subnet[] = { 255, 255, 0, 0 };                   //subnet mask
Server server(80);                                      //server port
byte sampledata=50;            //some sample data - outputs 2 (ascii = 50 DEC)             
int ledPin = 4;  // LED pin
char link[]="http://www.scienceprog.com/"; //link data
String readString = String(30); //string for fetching data from address
boolean LEDON = false; //LED status flag
void setup(){
//start Ethernet
  Ethernet.begin(mac, ip, gateway, subnet);
//Set pin 4 to output
  pinMode(ledPin, OUTPUT);  
//enable serial datada print  
  Serial.begin(9600);
}
void loop(){
// Create a client connection
Client client = server.available();
  if (client) {
    while (client.connected()) {
   if (client.available()) {
    char c = client.read();
    //read char by char HTTP request
    if (readString.length() < 30) 
      {
        //store characters to string 
        readString +=(c);
      } 
     else{
readString = readString.substring(1); //push left
readString +=(c);
} 
        //output chars to serial port
        Serial.print(c);
        //if HTTP request has ended
        if (c == '\n') {
          //lets check if LED should be lighted
         if(readString.indexOf("L=1"))
           {
             //led has to be turned ON
             digitalWrite(ledPin, HIGH);    // set the LED on
             LEDON = true;
           }else{
             //led has to be turned OFF
             digitalWrite(ledPin, LOW);    // set the LED OFF
             LEDON = false;             
           }
           
          // now output HTML data starting with standart header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          //set background to yellow
          client.print("<body style=background-color:yellow>");
          //send first heading
          client.println("<font color='red'><h1>HTTP test routines</font></h1>");
          client.println("<hr />");
          client.println("<hr />");
          //output some sample data to browser
          client.println("<font color='blue' size='5'>Sample data: ");
          client.print(sampledata);//lets output some data
          client.println("
");//some space between lines
          client.println("<hr />");
          //drawing simple table
          client.println("<font color='green'>Simple table: ");
          client.println("
");
          client.println("<table border=1><tr><td>row 1, cell 1</td><td>row 1, cell 2</td></tr>");
          client.println("<tr><td>row 2, cell 1</td><td>row 2, cell 2</td></tr></table>");          
          client.println("
");
          client.println("<hr />");
          //printing some link
          client.println("<font color='blue' size='5'>Link: ");
          client.print("<a href=");
          client.print(link);
          client.println(">Visit Scienceprog!</a>");
          client.println("
");
          client.println("<hr />");
          //controlling led via checkbox
          client.println("<h1>LED control</h1>");
          //address will look like http://192.168.1.110/?L=1 when submited
          client.println("<form method=get name=LED><input type=checkbox name=L value=1>LED
<input type=submit value=submit></form>");      
          client.println("
");
          //printing LED status
          client.print("<font size='5'>LED status: ");
          if (LEDON)
              client.println("<font color='green' size='5'>ON"); 
          else
              client.println("<font color='grey' size='5'>OFF");     
          client.println("<hr />");
          client.println("<hr />");
          client.println("</body></html>");
          //clearing string for next read
          readString="";
          //stopping client
          client.stop();
            }
          }
        }
      }
 }

How much SRAM do you have available? That looks like a lot of HTML being returned. Time to look at style sheets, I think.

The web interface “hangs” and doesn’t load when I plug it up to an actual relay. However, everything loads fine when the relay is not plugged in.

I hope you are smart enough not to be trying to directly power the relays from the arduino.