vedi quel pezzo di codice? ecco, in particolare vedi
if (client == true) {
// read bytes from the incoming client and write them back
// to any clients connected to the server:
server.write(client.read());
}
centro! in pratica anzichè scrivere Serial.wrire(balabl) o Server.read(blabla) scriverai client.write(blabla) e client.read(blabla)....
non solo è simile, ma anzi ha anche le print()..
ti ricordo che le print convertotno i valori in stringhe ascii (leggibili da un umano), se non lo sono già, mentre le write scrivono i byte "grezzi"
Allora, questo è il codice che ho "scritto" ma sul telnet non vedo nulla:
/*
* Web Server
*
* A simple web server that shows the value of the analog input pins.
*/
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 4 };
Server server(23);
void setup()
{
Ethernet.begin(mac, ip);
server.begin();
}
void loop()
{
Client client = server.available();
if (client) {
// an http request ends with a blank line
boolean current_line_is_blank = true;
while (client.connected()) {
if (client.available()) {
server.print("test");
}
}
// give the web browser time to receive the data
delay(1);
client.stop();
}
}[code]
lesto:
metti qualche serial per capire cosa succede, se il server vede la connessione al client etc...
sei in lan o su internet? nel secondo caso probabilmente hai NAT e firewall da impostare
Ovviamente sono in lan
ho messo dei serial:
/*
* Web Server
*
* A simple web server that shows the value of the analog input pins.
*/
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 4 };
Server server(23);
void setup()
{
Ethernet.begin(mac, ip);
server.begin();
Serial.begin(9600);
Serial.println("parto");
}
void loop()
{
Client client = server.available();
if (client) {
// an http request ends with a blank line
boolean current_line_is_blank = true;
while (client.connected()) {
Serial.println("zipit");
if (client.available()) { Serial.println("invio");
server.print("a");
}
// give the web browser time to receive the data
delay(1);
client.stop();
}
}
}[code]
Ma mi esce solo "parto", non arriva mai ad "invia"
E per forza, zipit ti compare perio... Tu stampi al Clint "a" solo se available cioè se ti ha scitto dei dati, quindi se via telnet appena ti connetti incii qualxosa... Però devi essere velocissimo, più del codice Arduino ad arrivare al if
togli l'if available e tutto torna... Con la serial non avresti mai messo available lì, perché ora lo metti?
/*
* Web Server
*
* A simple web server that shows the value of the analog input pins.
*/
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 4 };
Server server(23);
void setup()
{
Ethernet.begin(mac, ip);
server.begin();
Serial.begin(9600);
Serial.println("parto");
}
void loop()
{
Client client = server.available();
if (client) {
// an http request ends with a blank line
while (client.connected()) {
Serial.println("invio");
server.print("a");
// give the web browser time to receive the data
delay(1);
client.stop();
}
}
}[code]
while (client.connected()) {
Serial.println("invio");
server.print("a");
Serial.println("attendo una risposta di almeno 5 caratteri");
while (server.available() < 5){
//do nothing
}
Serial.println("risposta ricevuta! Rispondoi e disconnetto il client, di seguito quello che ho letto:");
server.print("Grazie per avermi parlato, hai scritto:");
while (server.available()){
server.print( server.read() );
}
delay(10); //dai il tempo al client di ricevere il messaggio
client.stop(); //disconnetti il client
}
ma l'hai letto il codice del reference che ti ho scritto tipo al 3° o 4° messaggio? lì c'è la tua soluzione. Che poi è la mia risposta di prima al contrario.
/*
* Web Server
*
* A simple web server that shows the value of the analog input pins.
*/
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 4 };
Server server(23);
void setup()
{
Ethernet.begin(mac, ip);
server.begin();
Serial.begin(9600);
Serial.println("parto");
}
void loop()
{
Client client = server.available();
if (client) {
// an http request ends with a blank line
while (client.connected()) {
while (client.connected()) {
Serial.println("invio");
server.print("a");
Serial.println("attendo una risposta di almeno 5 caratteri");
while (server.available() < 5){
//do nothing
}
Serial.println("risposta ricevuta! Rispondoi e disconnetto il client, di seguito quello che ho letto:");
server.print("Grazie per avermi parlato, hai scritto:");
while (server.available()){
server.print( client.read() );
}
delay(10); //dai il tempo al client di ricevere il messaggio
client.stop(); //disconnetti il client
}
}
}
}[code]
Compila ma quando telnetto mi dice "no route to host"
No route to host è un errore delle tabelle di routing del pc o del router, direi che hai combinato qualche casino ma larduono non cetra, salvo il cavo ethernet sia scollegato
Ok, ho compreto uno shield con il W5100, ma se compilo questo sketch:
/*
* Web Server
*
* A simple web server that shows the value of the analog input pins.
*/
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 4 };
EthernetServer server(23);
void setup()
{
Ethernet.begin(mac, ip);
server.begin();
Serial.begin(9600);
Serial.println("parto");
}
void loop()
{
Client client = server.available();
if (client) {
// an http request ends with a blank line
while (client.connected()) {
while (client.connected()) {
Serial.println("invio");
server.print("a");
Serial.println("attendo una risposta di almeno 5 caratteri");
while (server.available() < 5){
//do nothing
}
Serial.println("risposta ricevuta! Rispondoi e disconnetto il client, di seguito quello che ho letto:");
server.print("Grazie per avermi parlato, hai scritto:");
while (server.available()){
server.print( client.read() );
}
delay(10); //dai il tempo al client di ricevere il messaggio
client.stop(); //disconnetti il client
}
}
}
}
Non so se ho fatto bene perché di libreria Ethernet non ci capisco nulla (usata solo 1 volta) però mi pare tu avessi definito male il client e poi non avevi incluso la libreria SPI.
Questo codice compila (con la UNO):
/*
* Web Server
*
* A simple web server that shows the value of the analog input pins.
*/
#include <Ethernet.h>
#include "SPI.h"
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {
192, 168, 1, 4 };
EthernetServer server(23);
EthernetClient client;
void setup()
{
Ethernet.begin(mac, ip);
server.begin();
Serial.begin(9600);
Serial.println("parto");
}
void loop()
{
client = server.available();
if (client) {
// an http request ends with a blank line
while (client.connected()) {
while (client.connected()) {
Serial.println("invio");
server.print("a");
Serial.println("attendo una risposta di almeno 5 caratteri");
while (server.available() < 5){
//do nothing
}
Serial.println("risposta ricevuta! Rispondoi e disconnetto il client, di seguito quello che ho letto:");
server.print("Grazie per avermi parlato, hai scritto:");
while (server.available()){
server.print( client.read() );
}
delay(10); //dai il tempo al client di ricevere il messaggio
client.stop(); //disconnetti il client
}
}
}
}