Long ago, I've written some primitive telnet clinet in LabVIEW. Yes, you need to properly do the option negotiations. This is in simple binary code, see the bottom of
RFC 854,
RFC 855, and Section 6.6 of
RFC 2400, for details.
Send the following raw strings (decimal):
IAC Will Echo = 255 251 1 (FF FB 01 in hex)
IAC Don't Echo = 255 254 1 (FF FE 01 in hex)
Of course you should properly negotiate and answer the negotiation attempts by the client.
Maybe use a packet sniffer to see what codes are exchanged if a XP telnet client talks to a real telnet server.