Pages: [1]   Go Down
Author Topic: Arduino Server  (Read 277 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Forum,

ich habe ein Problem mit der Programmierung eines Servers. Ich möchte gerne, dass der Server den Client begrüßt, wenn dieser eine Verbindung aufgebaut hat. Allerdings gibt server.available() nur einen Wert zurück, wenn der Client dem Server etwas (CR+LF reicht aus) geschickt hat.

Hier mal mein Programm:

Code:
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 178, 17 };
#define PORT 12345

EthernetServer server = EthernetServer(PORT);

void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
  delay(500);
}

void loop()
{
EthernetClient client = server.available();
  if (client) {
  client.println("Herzlich willkommen auf diesem Server!");
  client.flush();
            while (client.connected()) {
    if (client.available()) {
        char c;
int charsWaiting, charsReceived = 0;
char textBuff[80];
 
  charsWaiting = client.available();
  do {
    c = client.read();
    if ((c != '\n') && (c != '\r')){
    textBuff[charsReceived++] = c;
    }
  }
  while(--charsWaiting > 0);
 
  textBuff[charsReceived] = '\0';
  client.print("Du sagtest: ");
  client.println(textBuff);
  textBuff[0] = '\0';
    charsReceived = 0;
}
          }
    delay(1);
    client.stop();
  }
}

Getestet habe ich mit Telnet:

macbook-pro:~ user$ telnet 192.168.178.17 12345
Trying 192.168.178.17...
Connected to 192.168.178.17.
Escape character is '^]'.

Herzlich willkommen auf diesem Server!
Test
Du sagtest: Test
^]
telnet> quit
Connection closed.
macbook-pro:~ user$

Nach dem "Escape character is '^]'." habe ich Return gedrückt und dann kam die Begrüßung. Über einen Denkanstoß würde ich mich sehr freuen. Aber bis jetzt sieht es so aus, als ob die Arduino-Ethernet-Library das nicht kann bzw. wenn man einen Webserver programmiert ist das auch kein Problem, weil dann der Browser den Server gleich dichtschwallert, was er alles kann und wer er ist.

Grüße
Jan
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Genau so ist es, die Ethernet-Lib "kann" das nicht. Schau mal hier:
http://arduino.cc/forum/index.php/topic,137031.msg1029945.html
Für genau das Problem hab ich mir mal die Zeit für eine Analyse genommen. Eine mögliche Anpassung der Ethernet-Lib gibt es in dem Thread auch, damit das was Du machen willst auch geht. Aber Achtung, die Änderung ist nicht offiziell und kann ggf. ungewollte Nebenwirkungen haben.
Mario.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke Mario!

Ich habe das "if (client.available())" aus "EthernetServer::available()" in der Library auskommentiert. Du hast natürlich vollkommen recht, wer weiß, was jetzt noch alles kaputt gegangen ist. Aber mal ehrlich. So macht es mehr Sinn. Ich glaube, die haben das nur nicht gemerkt, weil viele Clients Daten senden. smiley-wink

Vielen Dank für die Hilfe (Mich hat das zwei Tage gekostet)
Jan
Logged

Pages: [1]   Go Up
Jump to: