I want with my Arduino Uno to connect to a 2 Arduino UNO via Ethernet.
With a button on Ard. 1 can turn on, an LED to Ard. 2 .
When the LED on Ard. 2 Lights sends a message to Ard. 1
My question is who is the client and who is server.
Or maybe someone has a code example for me
My question is who is the client and who is server.
It doesn't really matter, as long as only one is a client and only one is a server.
The one that is the client can ask the server to do stuff, like turn pins on and off. The server can respond to the requests, but that is the only way the server can communicate with the client.
There is nothing Arduino-specific in your questions. Just general client/server architecture issues, which you don't seem to have a grasp of.
//zoomkat 7-03-12, combined client and server
//simple button GET with iframe code
//for use with IDE 1.0
//open serial monitor and send an g to test client and
//see what the arduino client/server receives
//web page buttons make pins high/low
//use the ' in html instead of " to prevent having to escape the "
//address will look like http://192.168.1.102:84 when submited
//for use with W5100 based ethernet shields
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //assign arduino mac address
byte ip[] = {192, 168, 1, 102 }; // ip in lan assigned to arduino
byte gateway[] = {192, 168, 1, 1 }; // internet access via router
byte subnet[] = {255, 255, 255, 0 }; //subnet mask
EthernetServer server(84); //server port arduino server will use
EthernetClient client;
char serverName[] = "web.comporium.net"; // (DNS) zoomkat's test web page server
//byte serverName[] = { 208, 104, 2, 86 }; // (IP) zoomkat web page server IP address
String readString; //used by server to capture GET request
//////////////////////
void setup(){
 pinMode(5, OUTPUT); //pin selected to control
 pinMode(6, OUTPUT); //pin selected to control
 pinMode(7, OUTPUT); //pin selected to control
 pinMode(8, OUTPUT); //pin selected to control
 //pinMode(5, OUTPUT); //pin 5 selected to control
 Ethernet.begin(mac,ip,gateway,gateway,subnet);
 server.begin();
 Serial.begin(9600);
 Serial.println(F("server/client 1.0 test 7/03/12")); // keep track of what is loaded
 Serial.println(F("Send an g in serial monitor to test client")); // what to do to test client
}
void loop(){
 // check for serial input
 if (Serial.available() > 0)
 {
  byte inChar;
  inChar = Serial.read();
  if(inChar == 'g')
  {
   sendGET(); // call client sendGET function
  }
 }Â
 EthernetClient client = server.available();
 if (client) {
  while (client.connected()) {
   if (client.available()) {
    char c = client.read();
    //read char by char HTTP request
    if (readString.length() < 100) {
     //store characters to string
     readString += c;
     //Serial.print(c);
    }
    //if HTTP request has ended
    if (c == '\n') {
     ///////////////
     Serial.print(readString); //print to serial monitor for debuging
      //now output HTML data header
     if(readString.indexOf('?') >=0) { //don't send new page
      client.println(F("HTTP/1.1 204 Zoomkat"));
      client.println();
      client.println();Â
     }
     else {Â
      client.println(F("HTTP/1.1 200 OK")); //send new page on browser request
      client.println(F("Content-Type: text/html"));
      client.println();
      client.println(F("<HTML>"));
      client.println(F("<HEAD>"));
      client.println(F("<TITLE>Arduino GET test page</TITLE>"));
      client.println(F("</HEAD>"));
      client.println(F("<BODY>"));
      client.println(F("<H1>Zoomkat's simple Arduino 1.0 button</H1>"));
      // DIY buttons
      client.println(F("Pin5"));
      client.println(F("<a href=/?on2 target=inlineframe>ON</a>"));
      client.println(F("<a href=/?off3 target=inlineframe>OFF</a>
"));
      client.println(F("Pin6"));
      client.println(F("<a href=/?on4 target=inlineframe>ON</a>"));
      client.println(F("<a href=/?off5 target=inlineframe>OFF</a>
"));
      client.println(F("Pin7"));
      client.println(F("<a href=/?on6 target=inlineframe>ON</a>"));
      client.println(F("<a href=/?off7 target=inlineframe>OFF</a>
"));
      client.println(F("Pin8"));
      client.println(F("<a href=/?on8 target=inlineframe>ON</a>"));
      client.println(F("<a href=/?off9 target=inlineframe>OFF</a>
"));
      client.println(F("Pins"));
      client.println(F(" <a href=/?off2468 target=inlineframe>ALL ON</a>"));
      client.println(F(" <a href=/?off3579 target=inlineframe>ALL OFF</a>"));
      client.println(F("<IFRAME name=inlineframe style='display:none'>"));    Â
      client.println(F("</IFRAME>"));
      client.println(F("</BODY>"));
      client.println(F("</HTML>"));
     }
     delay(1);
     //stopping client
     client.stop();
     ///////////////////// control arduino pin
     if(readString.indexOf('2') >0)//checks for 2
     {
      digitalWrite(5, HIGH);  // set pin 5 high
      Serial.println(F("Led 5 On"));
      Serial.println();
     }
     if(readString.indexOf('3') >0)//checks for 3
     {
      digitalWrite(5, LOW);  // set pin 5 low
      Serial.println(F("Led 5 Off"));
      Serial.println();
     }
     if(readString.indexOf('4') >0)//checks for 4
     {
      digitalWrite(6, HIGH);  // set pin 6 high
      Serial.println(F("Led 6 On"));
      Serial.println();
     }
     if(readString.indexOf('5') >0)//checks for 5
     {
      digitalWrite(6, LOW);  // set pin 6 low
      Serial.println(F("Led 6 Off"));
      Serial.println();
     }
     if(readString.indexOf('6') >0)//checks for 6
     {
      digitalWrite(7, HIGH);  // set pin 7 high
      Serial.println(F("Led 7 On"));
      Serial.println();
     }
     if(readString.indexOf('7') >0)//checks for 7
     {
      digitalWrite(7, LOW);  // set pin 7 low
      Serial.println(F("Led 7 Off"));
      Serial.println();
     } Â
     if(readString.indexOf('8') >0)//checks for 8
     {
      digitalWrite(8, HIGH);  // set pin 8 high
      Serial.println(F("Led 8 On"));
      Serial.println();
     }
     if(readString.indexOf('9') >0)//checks for 9
     {
      digitalWrite(8, LOW);  // set pin 8 low
      Serial.println(F("Led 8 Off"));
      Serial.println();
     }   Â
     //clearing string for next read
     readString="";
    }
   }
  }
 }
}
//////////////////////////
void sendGET() //client function to send and receive GET data from external server.
{
 if (client.connect(serverName, 80)) {
  Serial.println(F("connected"));
  client.println(F("GET /~shb/arduino.txt HTTP/1.1"));
  client.println(F("Host: web.comporium.net"));
  client.println(F("Connection: close"));
  client.println();
 }
 else {
  Serial.println(F("connection failed"));
  Serial.println();
 }
 while(client.connected() && !client.available()) delay(1); //waits for data
 while (client.connected() || client.available()) { //connected or data available
  char c = client.read();
  Serial.print(c);
 }
 Serial.println();
 Serial.println(F("disconnecting."));
 Serial.println(F("=================="));
 Serial.println();
 client.stop();
}
Hello,
thanks for the Code.
But it isnt that what i want,because i havnt a WebPage.
I only send a "string" from one Ethernet Shield to an other Ethernet Shield.
If a Button on an Input (Ard.1) is pressed then Send a "message" to the (Ard.2) and an Output is HIGH. If the OUTPUT is HIGH then (Ard.2) sends a "message" to (Ard.1) and an OUTPUT is HIGH
on the client arduino,
have it go read from the server and if it is clientnam is ar34 then parse the line to read in the data.
so the client can also send data to the server and having the server read and parse the information also. you don't need to use two servers because the client can always send data to the server and the server posts data for the client to read.
so if you have multiple clients then the server can post the info for all of them at the same time and the clients only parse the info that pertains to them.
But it isnt that what i want,because i havnt a WebPage.
The posted code doesn't care weather the GET request it receives comes from a web browser or an arduino client. The code posted doesn't care weather it is sending a GET request to a web server like Apache or to an arduino running server code. The code is setup with a web page included so it can be tried using a single arduino.