[Telnet]Serial Port printing Unknown Characters [Reverse Question Mark]

Hi there!
I'm pretty new to Telnet in Arduino, what I was trying to do is connect to the telnet server and try to login.
After connecting to the server the serial monitor print out this message.

connecting...
connected
⸮⸮⸮⸮ ⸮⸮#⸮⸮'

by the way, the code im using is from one of the examples.(Examples -> Ethernet -> TelnetClient)
tried changing baudrate from 9600 to 115200. still no luck.
Thank you in advance :slight_smile:

tried changing baudrate from 9600 to 115200. still no luck.

Does the baud rate in the program match that of the Serial monitor ?

UKHeliBob:
Does the baud rate in the program match that of the Serial monitor ?

Yep, still no luck. I tried changing b.rate from my code & Serial Monitor.

(deleted)

this is OK. the telnet client server attempts binary handshake protocols. if it doesn't get a response, it will not continue with handshake protocol.

is the client on Linux? read "man telnet"

Juraj:
this is OK. the telnet client attempts binary handshake protocols. if it doesn't get a response it will not continue with it.

is the client on Linux? read "man telnet"

I'm trying to connect to Mikrotik Router. Telnet Client enabled at port 8090.

/*
  Telnet client

 This sketch connects to a a telnet server (http://www.google.com)
 using an Arduino Wiznet Ethernet shield.  You'll need a telnet server
 to test this with.
 Processing's ChatServer example (part of the network library) works well,
 running on port 10002. It can be found as part of the examples
 in the Processing application, available at
 http://processing.org/

 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13

 created 14 Sep 2010
 modified 9 Apr 2012
 by Tom Igoe
 */

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

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 90, 20);
IPAddress gw(192, 168, 90, 1);
IPAddress sn(255, 255, 255, 0);

// Enter the IP address of the server you're connecting to:
IPAddress server(192, 168, 90, 1);

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 23 is default for telnet;
// if you're using Processing's ChatServer, use port 10002):
EthernetClient client;

void setup() {
  // You can use Ethernet.init(pin) to configure the CS pin
  //Ethernet.init(10);  // Most Arduino shields
  //Ethernet.init(5);   // MKR ETH shield
  //Ethernet.init(0);   // Teensy 2.0
  //Ethernet.init(20);  // Teensy++ 2.0
  //Ethernet.init(15);  // ESP8266 with Adafruit Featherwing Ethernet
  //Ethernet.init(33);  // ESP32 with Adafruit Featherwing Ethernet

  // start the Ethernet connection:
  Ethernet.begin(mac, ip, gw, sn);

  // Open serial communications and wait for port to open:
  
  Serial.begin(19200, SERIAL_8N1);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // Check for Ethernet hardware present
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
    while (true) {
      delay(1); // do nothing, no point running without Ethernet hardware
    }
  }
  while (Ethernet.linkStatus() == LinkOFF) {
    
    Serial.println("Ethernet cable is not connected.");
    delay(500);
  }
Here:
  // give the Ethernet shield a second to initialize:
 // delay(1000);
  Serial.println("connecting...");
  client.connect(server, 8090);
  // if you get a connection, report back via serial:
  if (client.connect(server, 8090)) {
    Serial.println("connected");

  } else {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
    goto Here;
  }
}

void loop() {
  // if there are incoming bytes available
  // from the server, read them and print them:
    //      delay(500);
  if (client.available()) {
    
  char c = client.read();
    Serial.print(c);
  }

  // as long as there are bytes in the serial queue,
  // read them and send them out the socket if it's open:
 // while (Serial.available() > 0) {
//    char inChar = Serial.read();
//    if (client.connected()) {
//      client.print(inChar);
//       Serial.print("inchar");
   // }
  //}

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    // do nothing:
    while (true) {
      delay(1);
    }
  }
}

this code is one of the examples, i just added some codes, I can connect but the response is this

connecting...
connected
⸮⸮⸮⸮ ⸮⸮#⸮⸮'

Juraj:
ChatServer is telnet server not client. you will not connect to telnet server with it

Sorry, what I mean is I can connect to the Telnet server(Mikrotik Router) but serial monitor gives me unreadable characters. I think connection is working. Just the serial monitor output.

ok. sorry, I didn't look at the sketch.
the answer is still valid, but the server, not the client attempts telnet handshake

the telnet client server attempts binary handshake protocols. if it doesn't get a response it will not continue with it.

It's a poor implementation that "doesn't continue." The protocol has very well defined default behavior.
(OTOH, it does NOT have well-defined behavior in the absence of responses. It just usually works.)

only the server, not the client attempts telnet handshake

Nonsense. A telnet client can initiate option negotiations as well.

Does your connection work in spite of the extra characters? If so, I'd just ignore them...

@westfw, I edited my comments