Coder Social home page Coder Social logo

9swampy / telnet Goto Github PK

View Code? Open in Web Editor NEW
123.0 11.0 51.0 3.33 MB

Published on Nuget at https://www.nuget.org/packages/Telnet

Home Page: http://www.nugetmusthaves.com/Package/Telnet

License: MIT License

C# 99.08% PowerShell 0.92%
telnet telnet-client telnet-protocol

telnet's People

Contributors

9swampy avatar palmtech avatar phillip-haydon avatar rdyhalt avatar rweads0520 avatar skwangles avatar toddaheath avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

telnet's Issues

Sending UTF-8 characters in XML file

Hello!

I'm making a C# Application that is using this Telnet NuGet and it works great except for one thing, I can't send swedish special characters (ÅÄÖ) which is in the UTF-8 encoding.

When i send my XML file (that contains ÅÄÖ) over the client with:

await cli.Write(System.IO.File.ReadAllText("myXMLFILE.xml"));

All my ÅÄÖ:s are converted to questions marks so for example "Bäst" becomes "B?st".

Is there any way to change the encoding so that the Telnet client doesn't convert my special characters?

Best regards

Assembly does not have a strongname

I am using you assembly in another assembly project which is COM exposed and requires yours to be signed (have a strong name). Would it be possible for you to sign it ?

Remove Console.Write() from TerminatedReadAsync

Hi!

I am develloping a console application using your library. I parse the return I get from sending a single command to a telnet server. But I don't want to see the response in the console:

private async Task<string> TerminatedReadAsync(Func<string, bool> isTerminated, TimeSpan timeout, int millisecondSpin)
{
var endTimeout = DateTime.Now.Add(timeout);
var s = string.Empty;
while (!isTerminated(s) && endTimeout >= DateTime.Now)
{
var read = await this.ReadAsync(TimeSpan.FromMilliseconds(millisecondSpin)).ConfigureAwait(false);
Console.Write(read);
s += read;
}
return s;
}

The string is returned anyway, so why always otput the response to the console?

May it be possible to remove this Console.Write() or make it optional?

Best regards

Pascal

We don't handle common TELNET codes

The following codes should be handled instead of treated like printable characters.

From RFC854:

     BELL (BEL)              7      Produces an audible or
                                    visible signal (which does
                                    NOT move the print head).
     Back Space (BS)         8      Moves the print head one
                                    character position towards
                                    the left margin.
     Horizontal Tab (HT)     9      Moves the printer to the
                                    next horizontal tab stop.
                                    It remains unspecified how
                                    either party determines or
                                    establishes where such tab
                                    stops are located.
     Vertical Tab (VT)       11     Moves the printer to the
                                    next vertical tab stop.  It
                                    remains unspecified how
                                    either party determines or
                                    establishes where such tab
                                    stops are located.
     Form Feed (FF)          12     Moves the printer to the top
                                    of the next page, keeping
                                    the same horizontal position.

http://www.rfc-editor.org/rfc/rfc854.txt

I have a solution that I will propose in an upcoming Pull Request.

Telnet to H3C switch

It can't read ":",may be include enter.
Thank you.

public async Task ReadmeExample()
{
using (TelnetServer server = new TelnetServer())
{
//using (Client client = new Client(server.IPAddress.ToString(), server.Port, new System.Threading.CancellationToken()))
using (Client client = new Client("193.125.2.100", 23, new System.Threading.CancellationToken()))
{
client.IsConnected.Should().Be(true);
(await client.TryLoginAsync("username", "password", timeoutMs)).Should().Be(true);
await client.WriteLine("show statistic wan2");
string s = await client.TerminatedReadAsync(">", TimeSpan.FromMilliseconds(timeoutMs));
s.Should().Contain(">");
s.Should().Contain("WAN2");
System.Text.RegularExpressions.Regex regEx = new System.Text.RegularExpressions.Regex("(?!WAN2 total TX: )([0-9.])(?! GB ,RX: )([0-9.])(?= GB)");
regEx.IsMatch(s).Should().Be(true);
MatchCollection matches = regEx.Matches(s);
decimal tx = decimal.Parse(matches[0].Value);
decimal rx = decimal.Parse(matches[1].Value);
(tx + rx).Should().BeLessThan(50);
}
}
}

Debug Trace:
SENT: ÿ
SENT: þ
SENT: �
SENT: ÿ
SENT: þ
SENT: �
SENT: ÿ
SENT: þ
SENT: �
SENT: ÿ
SENT: ý
SENT: �
SENT: ÿ
SENT: ü
SENT: �
SENT: ÿ
SENT: ü
SENT: �
23:796: RollingTimeout exceeded {0}
23:812: RollingTimeout exceeded {0}
SENT: ÿ
SENT: þ
SENT: �
SENT: ÿ
SENT: þ
SENT: �
SENT: ÿ
SENT: þ
SENT: �
23:827: RollingTimeout exceeded {0}
23:842: RollingTimeout exceeded {0}
23:858: RollingTimeout exceeded {0}
23:874: RollingTimeout exceeded {0}
Failed to terminate '


  • Copyright (c) 2004-2010 Hangzhou H3C Tech. Co., Ltd. All rights reserved. *
  • Without the owner's prior written consent, *
  • no decompiling or reverse-engineering shall be allowed. *

' with ':'

null exception on internalCancellation.Cancel

There exists the possibility that a cancel sent at the wrong time will cause a null exception. It happened to me while testing.

token.Register(() => this.internalCancellation.Cancel());

I have a solution that I will propose in an upcoming Pull Request.

Client keeps disconnecting

Hey,

I'm trying to use your library. Im trying to built a simple interface where I can use your Client to connect to a telnet server and send multiple commands. However when I initialize the Client directly and instantly use it everything works fine. But if I use the Client and pass it to another class via the constructor and then want to use it there, the TCP connection is already disconnected within milliseconds. Below the code how I use the client. In the debugger I already saw something that made me curious, maybe it has something to do with it. Would be great if you could help out!

public class TelnetClientConnection
    {
        private readonly Client _client;

        public TelnetClientConnection(Client client)
        {
            this._client = client;
        }


        public async Task ExecuteCommand()
        {
            Console.WriteLine(command);
            await _client.WriteLineAsync("\x01");
            await _client.WriteLineAsync(command);
        }
    }

    public class TelnetClient
    {
        public async Task<TelnetClientConnection> Connect(CancellationToken cancellationToken)
        {
            using var client = new Client("127.0.0.1", 2121, cancellationToken);

            await client.WriteLineAsync("status");

            return new TelnetClientConnection(client);
        }


    }


var telnetClient = await new TelnetClient().Connect(stoppingToken);
await telnetClient.ExecuteCommand("connect 172.21.21.83");

Debugger Info:
image
'((PrimS.Telnet.TcpByteStream)this._client.ByteStream).ReceiveTimeout' threw an exception of type 'System.NullReferenceException'

How to use It

Where can i read documentation about how to use this library?
Thanks. :)

CancellationToken functionality at creating Client Instance

I have a method to check if device has a telnet server. I need to set timeout of 1 sec max, But the default behavior is much longer, I thought I could use the cancellation token to handle it, But it doesn't work. I either use it wrong or I don`t understand what the token is used for. I do get when debugging to the timer event and call Cancel() on the token.

` public async Task DeviceCanTelnet(string address)
{

        CancellationTokenSource cts = new CancellationTokenSource();

        try
        {
            System.Timers.Timer timer = new System.Timers.Timer();
            timer.Interval = 1000;
            timer.Start();
            timer.Elapsed += (s, e) => 
            { 
                cts.Cancel(); 
            };
            using (Client client = new Client(address, 23, cts.Token))
            {
                return true;
            }
        }
        catch(Exception e)
        {
            return false;
        }
  
    }
}`

Is there a way of solving it?

Telnet Login

Hi, We have a device that only requires a password to login, is there a way to use this library without using the username and if not possible then can you override the login method to just use a password.

Weird response from server

Hey,

I'm currently experiencing some issue which might be related to this library. I'm using it to communicate with a local server and send messages back and forward. Every now and then I get very weird responses like this:
Weird Response

This is the expected response:
Normal Response

I'm not 100% sure if this is related to the server or my client. Did anyone else experience anything like this?

Read string always empty in passive mode

I am trying to use Telnet client against Altusen PKVM. While my code obviously succeeds to power the PKVM outlet off and on via telnet, I can not read the state of the device because the string read from client is always empty. Maybe it's because of the passive mode of communication? Using PuTTY, I have to set the communication mode to passive, otherwise I don't see a thing.

This is my code:

using (Client clientTelnetPkvm = new Client(PkvmHost,
                PkvmPort,
                new CancellationToken()))
{
    if (!clientTelnetPkvm.IsConnected)
        throw new Exception(
            string.Format("Cannot connect to telnet on PKVM at {0}:{1}", PkvmHost, PkvmPort));

    clientTelnetPkvm.TerminatedRead("Login:", PkvmReadTimeout);
    clientTelnetPkvm.WriteLine(PkvmUsername);
    clientTelnetPkvm.TerminatedRead("Password:", PkvmReadTimeout);
    clientTelnetPkvm.WriteLine(PkvmPassword);

    clientTelnetPkvm.TerminatedRead("==>", PkvmReadTimeout);
    clientTelnetPkvm.WriteLine("2");
    clientTelnetPkvm.TerminatedRead("==>", PkvmReadTimeout);
    clientTelnetPkvm.WriteLine("1");
    clientTelnetPkvm.TerminatedRead("==>", PkvmReadTimeout);
    clientTelnetPkvm.WriteLine("2");
    string status = clientTelnetPkvm.TerminatedRead("==>", PkvmReadTimeout);
//status is always empty
    throw new NotImplementedException();
}

Particular Example Request

Would it be possible for an example that doesn't assume logging into a switch and staying connected able to send/receive to the session? I normally only write in Powershell and Arexx so this is a little hard for me.

My particular case is I need to log into a old style telnet BBS (yes BBS) and the username and password prompts are not the first thing that needs to be responded to. I have to wait for a prompt "Press ENTER". then wait for name and password prompts, entering each. Wait for main menu (with prompt of "Main>" ignoring Ansi sequences) and then send a command to enter a chat room. What I'm trying to do is extend a Discord IRC relay bot to do a three way with my BBS too. I was able to get logged in using a modified example using System.Net.Sockets but I couldn't figure out how to encapsulate it like the Discord and IRC libraries running in their own parallel threads did so I couldn't send/receive back and forth. Kept giving me object reference errors so I started looking for a Telnet library to try.

Problem with ReadTerminated when using newline, \r\n

Hello-

First, thanks for the great, simple piece of code. I am having some difficulty and I'm not sure the best way to go about fixing it, so I've opened this issue.

I'm trying to read lines using the client. However, client.ReadTerminated("\r\n") doesn't work. This is because in your "IsTerminatorLocated" method in BaseClient.cs, you use
return s.TrimEnd().EndsWith(terminator);

I'd suggest changing this to:
return s.Contains(terminator);

First, TrimEnd() removes the \n\r from string, so EndsWith can't find the newline. Also, it's possible that a non-whitespace character ends up after your terminator (e.g. "> *").

Thanks,
Ben

How to send Ctrl C upon logging in

I have a device with root telnet login but it executes a script every time I login to it.

Is there any way to send CTRL C command upon login?

My use case is very simple, I need to execute command reboot and exit, but will be doing this from asp.net

code doesn't compile using monodevelop

Parser Error: The 'await' operator can only be used when its containing method is marked with the 'async' modifier

My guess is that VS is more permissive than monodevelop. It probably wouldn't hurt to add the 'async' modifier even though VS doesn't strictly require it. Thanks.

Upon further checking this seems to be a monodevelop bug - await appears not to be properly supported. I'm making progress by just side stepping "await". Sorry about false alarm.

primS Telnet Client Performance

Hi,
First, let me thank you for this very nice implementation.
I am working with the Telnet Client in a system with 5-10 threads - each connected to a different device.
Everything works nicely, except for low performance that I can also witness in the high CPU usage.
When comparing it with a similar SSH package (which is expected to be much heavier) I see that the Telnet implementation consumes almost three times the CPU doing similar things.
Digging in, I found out that you are reading from the socket char by char and only use minimal delay between reads.
Am I missing something? can this be somehow improved?
Kind regards,
I

[Question] Added Telnet Server to main project

Hi. Came across this recently. Looks like an interesting API. I notice you have a TelnetServer implementation in the test projects.
Do you have any plans on moving that to the main project where the client class is located? Thx

Confusing use of Timeout

Have a look at this line https://github.com/9swampy/Telnet/blob/master/PrimS.Telnet.NetStandard/ByteStreamHandler.cs#L51, it is doing
DateTime.Now.Add(TimeSpan.FromMilliseconds(timeout.TotalMilliseconds / 100));

If we are using Milliseconds in both the TimeSpans, why need to divide by 100?
The timeout is expected as a parameter in one of the overloads of the Client.ReadAsync. So, this will lead to unexpected behaviour and the user will not know what is happening.

For getting a 3-sec timeout I need to pass 300 sec. Please have a look at this.

.Net Core Socket ConnectAsync

I trying port the library to net core..
but I found only one problem

in TcpClient.cs class, the net core socket constructor does not take parameters
so, i made this change

      public TcpClient(string hostName, int port)
      {
        this.client = new System.Net.Sockets.TcpClient();
        this.client.ConnectAsync(hostName, port).GetAwaiter().GetResult();
      }

but I think that is not the correct way, because I calling a async method in a sync context

What is the best way to call this new method?
cc @9swampy

How to use this package in VS2017?

I've installed this package in VS2017, but I dont know how to use it in my solution. In other words, should I add something to my namespace?
Any information is helpful.

TerminatedReadAsync always hits timeout despite returning the terminator.

Here is what I am doing:

serverResponse = Await telnet.TerminatedReadAsync("#", TimeSpan.FromMilliseconds(SocketTimeout))

After that there is a test of the serverResponse to look for text from the command I ran. The serverResponse contains all of the text since the last command, including the terminator character "#". How can the returned string contain the terminator while TerminatedReadAsync hit the timeout?

(I've tested this and I know that the result has returned long before the timeout)

There are some characters returned after the terminator character "# " which further illustrates that the function doesn't return when expected.

The characters after my terminator are:

U+0008 : (BACKSPACE [BS])
U+0008 : (BACKSPACE [BS])
U+0020 : SPACE [SP]
U+0020 : SPACE [SP]
U+0008 : (BACKSPACE [BS])
U+0008 : (BACKSPACE [BS])

How to detect/handle remote disconnection?

Hi there,

First let me thank you for your great effort! Now, I tried to create something really simple, similar to PuTTY Telnet client. The main difference is that PuTTY is correctly able to handle when the other party decides to disconnect (e.g. after issuing a command like "exit" or so). I found no way how to determine such a condition other than waiting a long time and then eventually failing on a write operation.

Is there any way to determine that the other party sent the FIN flag?

Thanks and cheers,

Jan

I need configurable line terminators

My environment doesn't produce a ">" character so all the "TerminatedRead" methods hang open.
I am expecting a UNIX root shell that ends with "#".

I think that the API should expose a configurable line terminator property that can optionally be set to whatever string the programmer desires.

No stated dependency on Microsoft.VisualStudio.Threading, Version=17.3.0.0

Upgrading our project to the latest version (10.2) as resulted in us being unable to utilize the Telnet Client due to an undocumented dependency on the Microsoft.VisualStudio.Threading library.

Stack Trace:

System.SystemException: Custom Exception. Cause was: The type initializer for 'PrimS.Telnet.Client' threw an exception.
 ---> System.TypeInitializationException: The type initializer for 'PrimS.Telnet.Client' threw an exception.
 ---> System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.VisualStudio.Threading, Version=17.3.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.

File name: 'Microsoft.VisualStudio.Threading, Version=17.3.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
   --- End of inner exception stack trace ---
   at PrimS.Telnet.Client.set_IsWriteConsole(Boolean value)
   at [...]

We are able to navigate around this by including it in our project for the time being, but this needs to be listed within the Nuspec in order for Nuget to correctly identify and negotiate dependency on this library.

token.register calls this.internalCancellation.Cancel()

token.Register(() => this.internalCancellation.Cancel());

What this says is "After we have received a cancel command, send a cancel command". I only noticed this because it throws a null exception. The null exception is due to the cancel command already being done.

I recommend removing this line altogether.

How to read UTF8 strings?

Is there a way I can read UTF8 stings? The data I am receiving contains German characters and they appear to be corrupted. Likely being converted to ASCII. Is there a setting or a special method I need to use?

Guaranteed to Read all text when no terminated string and independently from timeout

I am using Telnet version 0.8.4 and .NET framework 4.6.1.
My program reads files from Windows Ce machine with Telnet one by one and then save them to local disk and archive folder on Windows CW machine.
Files are csv or txt type and they contain a lot of different texts, so I can not provide termination string.
I also can not rely on timeout when reading file, because they are different sizes from small to big one more than 1 MB, so timeout could terminate read of file text before end of file reached and text will be truncated.
There is no ReadToEnd method only ReadAsync or TerminatedReadAsync where you must provide timeout.
If file is big or other read command text response has a lot of data you can not rely on timeout because it can happen that read text will be truncated.
My current Telnet command:¸

   var command= "type " + filePath;
   var terminator = "Crg_-1122334455-Crg"; // cannot be in file text response
   await client.WriteLine(command);
   var response = await client.TerminatedReadAsync(terminator, TimeSpan.FromMilliseconds(timeoutMillis));
   if (response.ToLower().Contains("file not found"))
          {
              throw new Exception($"Error read file {filePath}: Error: {response}");
          }

Is there an option to guaranteed to read a file to end of text without rely on timeout and termination string?

TerminatedRead in Client

Hi,

It seems the third parameter millisecondSpin is not used at all. The default value 1ms seems to be always used.

Thanks !

TryLoginAsync attempt 2

Sorry about messing up that last post, as well as accidentally closing it ! Here it is again:

I have a program I wrote that logs in to a Netgear R7000 wireless access point using Prims Telnet. By default the R7000 does not support Telnet but there is a way of enabling it. When enabled my program works without issue. I log in using the TryLoginAsync method, issue the command I want using WriteLine and getting the response to parse using TerminatedReadAsync. I log out using the Dispose method. This sequence is repeated every couple of minutes and has run for weeks without any problems.
My issue is when Telnet is not enabled on the R7000 which can happen if the router has to be rebooted. When this happens my program just hangs on the TryLoginAsync call and will sit there until Telnet is enabled.

I thought that by setting a timeout on the call I would be able to detect this but so far have been unable to get it to work. Here is the code I'm using:
var telnetClient = new PrimS.Telnet.Client(IPaddress, 23, new CancellationToken());
var connection = await telnetClient.TryLoginAsync("root", "rovers15", 20000);
if (telnetClient.IsConnected)
{
do my thing
}
else
{
Handle cannot connect event
}

I've tried a few variations on the above but the else condition is never triggered.

Can anyone tell me what I am doing wrong?
TIA
Mike

TelnetServer?

The example code on the front page (the unit test case) seems broken.
Can't find a TelnetServer class, and the code works fine when I comment that line out.

Async Connect support

Hey there, I noticed there's already a branch implementing Connect() asynchronously. Is there any chance of releasing it any time soon?

LiteGuard dependency conflict

Problem

When starting a brand new .NET Core 3.1 project with the README Telnet sample, the latest version of Telnet throws the following exception,

System.IO.FileLoadException: 'Could not load file or assembly 'LiteGuard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null'. The located assembly's manifest definition does not match the assembly reference. (0x80131040)'

Temporary Solution

Specifically add a nuget package reference to LiteGuard 2.0.1 to match expected version for .NET Core version of Telnet.

Endless loop while logging in

I am trying your master branch on a Telnet enabled PDU device, and when it goes for login, it endlessly prints out

RollingTimeout exceeded 56:914
RollingTimeout exceeded 56:931
RollingTimeout exceeded 56:945
RollingTimeout exceeded 56:961
RollingTimeout exceeded 56:976
RollingTimeout exceeded 56:992
RollingTimeout exceeded 57:008
RollingTimeout exceeded 57:024
RollingTimeout exceeded 57:039
RollingTimeout exceeded 57:056
RollingTimeout exceeded 57:070
RollingTimeout exceeded 57:087
RollingTimeout exceeded 57:101
RollingTimeout exceeded 57:117
RollingTimeout exceeded 57:133
RollingTimeout exceeded 57:148
RollingTimeout exceeded 57:164
RollingTimeout exceeded 57:180
RollingTimeout exceeded 57:196
RollingTimeout exceeded 57:212
RollingTimeout exceeded 57:226
RollingTimeout exceeded 57:243
RollingTimeout exceeded 57:259

What does this means ?

TelnetServer not found

Hi!
I tried your example code, however I cannot find the TelnetServer class. Or has this class been replaced with the TcpClient?

using (TelnetServer server = new TelnetServer())

Have you a working example? I have struggles to get the login work...
Thanks!

[TestMethod]
    public async Task ReadmeExample()
    {
      using (TelnetServer server = new TelnetServer())
      {
        using (Client client = new Client(server.IPAddress.ToString(), server.Port, new System.Threading.CancellationToken()))
        {
          client.IsConnected.Should().Be(true);
          (await client.TryLoginAsync("username", "password", TimeoutMs)).Should().Be(true);
          client.WriteLine("show statistic wan2");
          string s = await client.TerminatedReadAsync(">", TimeSpan.FromMilliseconds(TimeoutMs));
          s.Should().Contain(">");
          s.Should().Contain("WAN2");
          Regex regEx = new Regex("(?!WAN2 total TX: )([0-9.]*)(?! GB ,RX: )([0-9.]*)(?= GB)");
          regEx.IsMatch(s).Should().Be(true);
          MatchCollection matches = regEx.Matches(s);
          decimal tx = decimal.Parse(matches[0].Value);
          decimal rx = decimal.Parse(matches[1].Value);
          (tx + rx).Should().BeLessThan(50);
        }
      }
    }

Can't log in to the linux telnetd

As in topic, I can't log into the Linux telnet server via C#, but I can log in via Putty which same login and password.

using (Client client = new Client("10.0.0.249", 23, new CancellationToken()))
{
	if (client.IsConnected)
	{
		Console.WriteLine($"Connected to the telnet server.");

		bool result = await client.TryLoginAsync("test", "test", 2000);
	
		if (result)
			Console.WriteLine($"Loginedin as test.");
		else
			Console.WriteLine($"Loginedin failed.");
	}
	else
		Console.WriteLine($"Can't connect to the telnet server.");
}

Result: after 2s "Loginedin: failed."

Is that project it is for specific telnet server ?!

TryLoginAsync timeout

I have a program I wrote that logs in to a Netgear R7000 wireless access point using Prims Telnet. By default the R7000 does not support Telnet but there is a way of enabling it. When enabled my program works without issue. I log in using the TryLoginAsync method, issue the command I want using WriteLine and getting the response to parse using TerminatedReadAsync. I log out using the Dispose method. This sequence is repeated every couple of minutes and has run for weeks without any problems.
My issue is when Telnet is not enabled on the R7000 which can happen if the router has to be rebooted. When this happens my program just hangs on the TryLoginAsync call and will sit there until Telnet is enabled.

I thought that by setting a timeout on the call I would be able to detect this but so far have been unable to get it to work. Here is the code I'm using:
var telnetClient = new PrimS.Telnet.Client(IPaddress, 23, new CancellationToken());
var connection = await telnetClient.TryLoginAsync("root", "rovers15", 20000);
if (telnetClient.IsConnected)
{
do my thing
}
else
(

Can not be used according to "usage"

I am a novice using c # to develop telnet-related apps.
And I used the VS2012 installed this API, but I can't understand how to use it after i read the "Usage" many times. I think the Usage is pseudo code not really example.
Because of I copy paste the sample code(in the usage) into VS2012 there are some error happened.
There are some properties and methods that can not be found.(TelnetServer、.Should().Be(true))
Could you kindly tell me or give me some really example let me know how to use this API.
Many thanks.

Request for non blocking connection.

For the most part everything works as I would think, and very well, but there is no way I can find to do a non blocking connection attempt without creating my own version of TCPClient to be created with an existing System.Net.Sockets connected using TcpClient.ConnectAsync(). As everything else is await-able and non blocking, this is an odd oversight. If I end up having some time I may try to push a modified library that does this as it probably shouldn't be hard looking at the code, but we'll see.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.