Senden klappt nicht!

Hallo zusammen!

Mein Ethernetshield arbeitet ja als Webserver. Nun möchte ich eine URL als Stringbefehl
versenden, damit beim empfangenden PC eine Webseite aufgeht.
Jetzt habe ich dafür die Udp-Library eingebunden und bekomme aber laufend
Fehlermeldungen wie z.B.:
no matching function for call to 'UdpClass::sendPacket(char[13], String&, int&)'
Was ist an dem Programm faul, bzw. wie kann ich das Senden realisieren?
Mein Programm sieht folgendermaßen aus, wobei ich das HTML-Zeug weg-
gelassen habe:

#include <SPI.h>
#include <Ethernet.h>
#include <Flash.h>
#include "UdpString.h"
#include <Udp.h>

byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x40, 0xF2 }; // MAC-Adresse
byte ip[] = { 192, 168, 178, 22 }; // IP-Adresse
byte gateway[] = { 192, 168, 178, 1 }; // Gateway
byte subnet[] = { 255, 255, 255, 0 }; // Subnetz

Server server(80);
char ReplyBuffer[] = "acknowledged"; // a string to send back
String remoteIp = "192.168.178.44"; // the remote IP address
int remotePort = 80; // the destination port
unsigned int localPort = 8888; // local port to listen on

int Pin8 = 8; // Digital Input
int Pin3 = 3; // Digital Output
int Pin5 = 5; // Analog Output
int Pin6 = 6; // Analog Output

int state;
int helligkeit = 0;

String readString = String(100); // String for data from address
boolean Pin8ON = false; // Status flag
boolean Pin3ON = false; // Status flag
boolean Pin5ON = false; // Status flag
boolean Pin6ON = false; // Status flag

// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,

void setup() {

Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Udp.begin(localPort);

pinMode(Pin8, INPUT);
pinMode(Pin3, OUTPUT);
pinMode(Pin5, OUTPUT);
pinMode(Pin6, OUTPUT);
digitalWrite(Pin3, state);
analogWrite(Pin5, helligkeit);
analogWrite(Pin6, helligkeit);

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() < 100) {

//store characters to String
readString = readString + c;
}

//output chars to serial port
Serial.print(c);

// if there's data available, read a packet
int packetSize = Udp.available(); // note that this includes the UDP header
if(packetSize)
{
packetSize = packetSize - 8; // subtract the 8 byte header
Serial.print("Received packet of size ");
Serial.println(packetSize);

// read the packet into packetBufffer and get the senders IP addr and port number
// Udp.readPacket(packetBuffer,UDP_TX_PACKET_MAX_SIZE, remoteIp, remotePort);
Serial.println("Contents:");
Serial.println(packetBuffer);

Udp.sendPacket( ReplyBuffer, remoteIp, remotePort);
}

//clearing string for next read
readString="";

//stopping client
client.stop();
}}}}}

....damit beim empfangenden PC eine Webseite aufgeht.

Das lässt sich nicht erreichen ! Wenn dann sendet der andere (Server) eine Seite an Arduinchen, das dann aber Client ist und kein Server. Und da wäre zu klären was Arduino damit anstellen soll .. !

Hi,

ich sehe schon du hast den Webserver Code von Poldi und Katsu genommen. Also ich bin damit nicht so glücklich geworden da der HTML Code ein bischen buggy ist. Aber du müsstes mit den HTML Code Buttons auch Webseiten aufrufen können wenn du die richtig konfigurierst.

Hi,
ja, der Webserver von Poldi läuft ganz gut, aber welche Bibliothek brauche
ich, um einen String zu senden? Emails zu senden soll ja auch gehen...
Geht da Udp? Es soll sowas wie eine GET-Anforderung sein, damit wirklich auf dem anderen Server eine Webseite aufgeht.
Ich weiß, es ist keine leichte Aufgabe, aber ICH BRAUCHE ES :wink:

GET übergibtg nur Variablen.

WGET wäre der Befehl den du suchst, aber wie gesagt ... Arduino ist kein Monster

Es ist nicht so ganz klar, was du genau machen möchtest aber so ganz grundsätzlich kann ich schonmal folgendes aussagen:

  • Webseiten werden im Browser nur angezeigt, wenn diese vorher auch vom Browser angefordert worden sind. Wenn Dein Arduino als Webserver läuft geht das ausschließlich folgendermaßen: Du tippst die URL zum Arduino im Browser ein, der Browser (=Client) macht eine Verbindung zum Arduino auf und fragt nach, der Arduino schickt über die selbe Verbindung eine Antwort zurück. Wenn Dein Arduino als Client läuft, brauchst du auf dem Rechner noch ein Serverprogramm, was halt genauso auf umgekehrtem Wege Anfragen vom Arduino erwartet - ein Browser tut das definitiv nicht.
    Es gibt also nichts was ein Arduino senden könnte um von sich aus eine Webseite auf dem Rechner zu öffnen (es sei denn Du programmierst noch einen Server der auf dem Rechner läuft und darauf wartet was vom Arduino zu bekommen um dann den Browser mit der entsprechenden Seite zu öffnen...)

  • Webseiten werden üblicherweise per HTTP über TCP übertragen. UDP ist ganz sicher der falsche Ansatz.

Hi,

ich hatte mich auch verlesen. Also er möchte mit dem Arduino eine Webseite an einem bestimmten PC versenden die dann automatisch auf dem PC angezeigt wird.