Comments (4)
Sounds like a sort of race condition; the string doesn't terminate with "#" it terminates with "#+the other chars" hence the condition isn't being met. Two routes forward; rework to await the full terminating string (0.8.1's published with your LineTerminator configuration in) or work out why the termination isn't caught in passing?
from telnet.
That's what I don't understand. Doesn't TerminatedReadAsync move one byte at a time?
The Char should be seen as one of those bytes and exit the reading loop ...
from telnet.
Sorry, where did I say the code was perfect and/or bug free? :-p I don't have time to look in to it more tonight; let me know how you get on?
from telnet.
Ok, I think I'm on to something.
The "IsTerminatorLocated" looks at the last char using ".EndsWith".
"TerminatedReadAsync" checks if it's terminated in a loop calling "ReadAsync".
So far, so good. Here is the problem:
"ReadAsync" pulls bytes in a loop based on some rollingTimeout that I don't fully understand.
It looks like the nested read loop inside ReadAsync can return more than one char so that when we get back to the Terminator check, the terminator is no longer on the end.
Two solutions:
-
Change "EndsWith" to "Contains" to detect the terminator across the whole string.
(This might have performance impacts on long server responses) -
Change the exit conditions for the ReadAsync loop to ensure we only return one char at a time.
(I don't understand why we are looping here at all so I'm not sure what the impact would be)
Do you have a preference? Or a 3rd option? I'm leaning towards ".Contains" right now.
from telnet.
Related Issues (20)
- Weird response from server HOT 1
- LiteGuard dependency conflict HOT 7
- [Question] Added Telnet Server to main project HOT 2
- Console.write in TryLoginAsync intentional? HOT 3
- Particular Example Request HOT 1
- CancellationToken functionality at creating Client Instance HOT 1
- TryLoginAsync timeout HOT 1
- TryLoginAsync attempt 2 HOT 3
- Sending UTF-8 characters in XML file HOT 3
- Remove Console.Write() from TerminatedReadAsync HOT 2
- TelnetServer? HOT 2
- Guaranteed to Read all text when no terminated string and independently from timeout HOT 6
- Confusing use of Timeout HOT 1
- No stated dependency on Microsoft.VisualStudio.Threading, Version=17.3.0.0 HOT 6
- Update function TryLoginAsync with Regex terminator string HOT 1
- Client keeps disconnecting HOT 2
- Telnet Login HOT 1
- How to read UTF8 strings? HOT 2
- How to filter out remote echo of my commands HOT 1
- DONT/WONT case should read byte to the end of IAC
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from telnet.