Go Down

Topic: Chat server - verbindung schlägt fehl (Read 1 time) previous topic - next topic

patafix14

Aug 04, 2013, 06:40 pm Last Edit: Aug 04, 2013, 07:19 pm by patafix14 Reason: 1
Hallo alle miteinander,
ich bin ziemlich neu bei dem ganzen hier und gerade etwas ratlos.
Ich habe mir einen Arduino Uno + Wifi shield geholt und versuche nun mich mit dem Beispiel Sketch Wifi-Chat-Server zu verbinden jedoch schlägt die Verbindung jedes mal fehl.
Ich habe jetzt auch direkt keine Ahnung was ich an Code o.ä. anhängen könnte da ich überhaubt keine Idee hab woran das gerade hängen könnte.
Ich versuche den Verbindungsaufbau über die IP die mir im Serial-Monitor angezeigt wird und den Port 23.
Vielen Dank für eure Hilfe,
Patrik.

jurs


Ich versuche den Verbindungsaufbau über die IP die mir im Serial-Monitor angezeigt wird und den Port 23.


Welches Betriebssystem und welchen Telnet-Client verwendest Du zum Verbindungsaufbau?
Welche Fehlermeldung wird dir beim Verbindungsversuch vom Telnet-Client angezeigt?

Hast Du vielleicht einen anderen Arduino mit Netzwerkkarte im Netzwerk laufen, auf dem dieselbe MAC-Adresse konfiguriert ist?

patafix14

Zum Verbindungsaufbau verwende ich ein selbstgeschriebenes Programm in C#, daran sollte es jedoch nicht liegen da ich mit selbigen eine Verbindung zu einem anderen Programm herstellen kann. Betriebssystem ist Win8Pro und Visual C# gibt mir "Es konnte keine Verbindung hergestellt werden" aus. Einen anderen Arduino gibt's nicht im Netzwerk.

jurs

#3
Aug 04, 2013, 08:41 pm Last Edit: Aug 04, 2013, 08:47 pm by jurs Reason: 1

Zum Verbindungsaufbau verwende ich ein selbstgeschriebenes Programm in C#, daran sollte es jedoch nicht liegen da ich mit selbigen eine Verbindung zu einem anderen Programm herstellen kann.


Was für ein "anderes Programm"?
Eine Verbindung zu einem anderen Telnet-Server auf einer anderen IP-Adresse funktioniert und eine Verbindung zum Arduino Chatserver an Port-23 funktioniert nicht?


Betriebssystem ist Win8Pro und Visual C# gibt mir "Es konnte keine Verbindung hergestellt werden" aus. Einen anderen Arduino gibt's nicht im Netzwerk.


Also Windows.

Hast Du den in Windows enthaltenen Telnet-Client freigeschaltet? Funktioniert es damit?
Oder mal "Putty" installiert und damit eine Port-23 Telnet Verbindung getestet?

Warum testest Du zuerst "mit einem selbstgeschriebenen Programm" und nicht mit einem "millionenfach bewährten Programm"?

Funktionieren denn andere Beispielprogramme zum Ethernet-Shield auf dem Arduino, z.B. der Webserver?

Edit: Ähem, sehe jetzt erst gerade "Wifi shield". Welche Verbindung kommt denn jetzt genau nicht zustande? Die Wifi-Verbindung des Arduino zum WLAN-Netzwerk?

Ich bin bis jetzt davon ausgegangen, dass die Verbindung zwischen einem Telnet-Client auf einem Windows-PC zum auf dem Arduino laufenden Chatserver nicht zustande kommt. Oder meinst Du die Wifi-Verbindung vom Arduino zum WLAN, die nicht zustande kommt?

patafix14

#4
Aug 04, 2013, 10:14 pm Last Edit: Aug 04, 2013, 11:04 pm by patafix14 Reason: 1

Warum testest Du zuerst "mit einem selbstgeschriebenen Programm" und nicht mit einem "millionenfach bewährten Programm"?

Wieso klingt das nur so vorwurfsvoll...Die Antwort ist einfach, weil ich bis eben nicht von TelNet wusste. Aber auch dessen Verwendung hat mir keine neuen Erkenntnisse gebracht denn auch diese Verbindung klappt NICHT obwohl der Arduino eindeutig mit dem Netzwerk verbunden ist. Deswegen gibt mir der Monitor doch auch die IP Adresse aus, oder?


Ich bin bis jetzt davon ausgegangen, dass die Verbindung zwischen einem Telnet-Client auf einem Windows-PC zum auf dem Arduino laufenden Chatserver nicht zustande kommt.

Sehr richtig, und nun habe ich auch den Webserver ausprobiert und danach bei mir im Browser die im SerialMonitor stehende IP Adresse angefunkt....Nichts.

Ich habe nun im Zuge dessen auch mal meine FritzBox etwas genauer beobachtet. Besser gesagt meine zwei FritzBox(en). Eine davon fungiert als Modem, die andere als W-Lan Router da nur Letztere einen USB Anschluss hat, jedoch selbst kein Modem. Mein Fritz.Wlan.Box zeigt mir den Arduino im interface an, jedoch ohne die zugehörige IP-Adresse. Meine Fritz.Box , also mein Moden zeigt sie hingegen schon an. Das hat bestimmt was zu bedeuten. Ich werde mal versuchen den Arduino direkt mit der Modem FritzBox zu verbinden.Vergesst das, daran liegts nicht....

EDIT: Aus Genauigkeit habe ich nochmal überprüft ob eine Telnet Verbindung Geräteübergreifend generell möglich ist. Sie ist es.
EDIT2: Ein weiterer Telnet Client(zaTelnet light für WP8) gibt mir folgendes aus:
Code: [Select]
Init DNS...OK!
Init Connection...
Connection failed due ConnectionRefused

Fällt dir dennoch etwas dazu ein woran es noch liegen könnte?, ich schöpfe gerne alle Möglichkeiten aus.
Danke bis hier!

jurs


EDIT: Aus Genauigkeit habe ich nochmal überprüft ob eine Telnet Verbindung Geräteübergreifend generell möglich ist. Sie ist es.


Also genau das Softwareprogramm, das die Verbindung herstellen soll, hat auf genau dem Port (Telnet-Port 23), zu dem auch mit dem Arduino eine Verbindung hergestellt werden soll, eine andere Telnet-Verbindung erfolgreich hergestellt? Andere Telnet/Port-23 Verbindungen funktionieren, nur nicht zum Arduino?

In dem Fall kannst Du die Windows-Firewall, die das Programm blockieren könnte, als Fehlerursache ausschließen.


ConnectionRefused


Eine Fehlermeldung "ConnectionRefused" anstelle von "Timeout" oder "Not Responding" hört sich so an, als wenn die Verbindung funktionieren könnte, wenn sie in Deinem Netzwerk nicht blockiert würde. Da die Windows-Firewall (s.o.) nicht als Blockierer der Verbindung in Frage kommt, könnte es vielleicht an der Firewall im WLAN-Router liegen.

Hast Du mal auf die Statusseite des Routers geschaut, welche WLAN-Clients am Router angemeldet sind?
Ist das WiFi-Shield des Arduino dabei?
Hast Du am Router vielleicht erweiterte Sicherheitsfeatures aktiviert, z.B. dass nur Clients WiFi-Verbindungen zu Deinem WLAN erhalten, deren MAC-Adressen in der Konfiguration des Routers eingetragen sind und die MAC-Adresse des Arduino-Shields steht nocht nicht in der Konfiguration?


patafix14


Also genau das Softwareprogramm, das die Verbindung herstellen soll, hat auf genau dem Port (Telnet-Port 23), zu dem auch mit dem Arduino eine Verbindung hergestellt werden soll, eine andere Telnet-Verbindung erfolgreich hergestellt? Andere Telnet/Port-23 Verbindungen funktionieren, nur nicht zum Arduino?


Genau!


Eine Fehlermeldung "ConnectionRefused" anstelle von "Timeout" oder "Not Responding" hört sich so an, als wenn die Verbindung funktionieren könnte, wenn sie in Deinem Netzwerk nicht blockiert würde. Da die Windows-Firewall (s.o.) nicht als Blockierer der Verbindung in Frage kommt, könnte es vielleicht an der Firewall im WLAN-Router liegen.

Hab alles durch geschaut, keine Firewall Optionen. Nur per Passwort geschützt. Und selbst wenn dann würde doch wohl der Arduino garnicht erst Verbinden, weil er ja schon beim versuch davon abgehalten würde.

patafix14

#7
Aug 05, 2013, 01:56 pm Last Edit: Aug 05, 2013, 10:13 pm by patafix14 Reason: 1

Also genau das Softwareprogramm, das die Verbindung herstellen soll, hat auf genau dem Port (Telnet-Port 23), zu dem auch mit dem Arduino eine Verbindung hergestellt werden soll, eine andere Telnet-Verbindung erfolgreich hergestellt? Andere Telnet/Port-23 Verbindungen funktionieren, nur nicht zum Arduino?


Genau!


Eine Fehlermeldung "ConnectionRefused" anstelle von "Timeout" oder "Not Responding" hört sich so an, als wenn die Verbindung funktionieren könnte, wenn sie in Deinem Netzwerk nicht blockiert würde. Da die Windows-Firewall (s.o.) nicht als Blockierer der Verbindung in Frage kommt, könnte es vielleicht an der Firewall im WLAN-Router liegen.

Hab alles durch geschaut, keine Firewall Optionen. Nur per Passwort geschützt. Und selbst wenn dann würde doch wohl der Arduino garnicht erst Verbinden, weil er ja schon beim versuch davon abgehalten würde.


Quote
Da die Windows-Firewall (s.o.) nicht als Blockierer der Verbindung in Frage kommt

sie tut es außerdem nicht weil der andere telnet client den ich verwendet habe auf meinem Smartphone sitzt.




EDIT: Ich hab jetzt auch mal den Webclient ausprobiert, da gibt er mir das hier aus:
Code: [Select]
Attempting to connect to SSID: *Supergeheimes Netzwek*
Connected to wifi
SSID: *Supergeheimes Netzwek* IP Address: 192.168.178.40
signal strength (RSSI):-72 dBm

Starting connection to server...

disconnecting from server.

also kommt er nicht bis ins Internet...

EDIT2: und ich hab noch was heraus gefunden. Der Arduino ist nicht in der Lage eine Telnet-23 Verbindung zu einem anderen Gerät herzustellen. Also weder als Client noch als Server. Demnach liegt es entweder am Router, das teste ich morgen mal in einem anderen Netzwerk, oder es liegt am Shield. Dann müsste ich es wohl umtauschen.

mkl0815

kannst du mal bitte den sketch posten. bekommt dein arduino die ip per dhcp vom router, oder ist die fest im sketch definiert? wie sehen denn netzmaske u.ä. aus?
mario.

patafix14

#9
Aug 06, 2013, 02:59 pm Last Edit: Aug 06, 2013, 03:15 pm by patafix14 Reason: 1
EDIT: Und jetzt wird richtig interessant! Ich habe mal an meinem Router die MAC Adresse des Wifishields hinzugefügt und für diesen Eine IP Adresse festgelegt. Verbindet sich nun der Arduino zeigt er meinen manuellen Eintrag nicht als verbunden, es gibt jedoch wieder den Eintrag den ich auch als Bild angehängt hab und der Arduino hat wieder die gleiche IP wie zuvor.
Code: [Select]
/*
Chat  Server

A simple server that distributes any incoming messages to all
connected clients.  To use telnet to  your device's IP address and type.
You can see the client's input in the serial monitor as well.

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


Circuit:
* WiFi shield attached

created 18 Dec 2009
by David A. Mellis
modified 31 May 2012
by Tom Igoe

*/

#include <SPI.h>
#include <WiFi.h>

char ssid[] = "yourNetwork"; //  your network SSID (name)
char pass[] = "secretPassword";    // your network password (use for WPA, or use as key for WEP)

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

int status = WL_IDLE_STATUS;

WiFiServer server(23);

boolean alreadyConnected = false; // whether or not the client was connected previously

void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo 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);
  }
  // start the server:
  server.begin();
  // you're connected now, so print out the status:
  printWifiStatus();
}


void loop() {
  // wait for a new client:
  WiFiClient client = server.available();


  // when the client sends the first byte, say hello:
  if (client) {
    if (!alreadyConnected) {
      // clead out the input buffer:
      client.flush();   
      Serial.println("We have a new client");
      client.println("Hello, client!");
      alreadyConnected = true;
    }

    if (client.available() > 0) {
      // read the bytes incoming from the client:
      char thisChar = client.read();
      // echo the bytes back to the client:
      server.write(thisChar);
      // echo the bytes to the server as well:
      Serial.write(thisChar);
    }
  }
}


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");
}


Den Sketch hab ich mal angehängt, obwohl es auch nur das BeispielSketch ist und es Funktioniert mit bisher keinem der Beispiele.(z.B. das SimpleServer oder wifiWebServer Exempel)
Demnach bezieht der Arduino die IP auch vom Router.
WiFiConnectionWPA:
Code: [Select]

//ein zwei Sachen hab ich geschwärzt, wird aber im original selbstverständlich angezeigt
signal strength (RSSI):-80
Encryption Type:4

IP Address: 192.168.178.40
192.168.178.40
MAC address: **:**:**:**:**:**
SSID: ********************
signal strength (RSSI):-80
Encryption Type:4

Wie finde ich die netzmaske?

Mein Router zeigt mir folgenes an(Anhang), hinter dem Namen sollte eigentlich die IP Adresse stehen:

Go Up