toemsel / network Goto Github PK
View Code? Open in Web Editor NEWC# Network Library
Home Page: https://push-force.dev
License: GNU Lesser General Public License v3.0
C# Network Library
Home Page: https://push-force.dev
License: GNU Lesser General Public License v3.0
Due this report I was able to identify another critical bug. Nothing related to UDP, but still, will affect all RSA connections. (KeyNotFoundException)
Originally posted by @Toemsel in #6 (comment)
Example: #40
Send a huge string with the RSA connection object. -> "CryptographicsException"
1/5 times an exception occurs.
Exception has occurred: CLR/System.ArgumentException
Exception thrown: 'System.ArgumentException' in System.Private.CoreLib.dll: 'Must specify valid information for parsing in the string.'
at System.Enum.EnumResult.SetFailure(ParseFailureKind failure, String failureMessageID, Object failureMessageFormatArgument)
at System.Enum.TryParseEnum(Type enumType, String value, Boolean ignoreCase, EnumResult& parseResult)
at System.Enum.Parse(Type enumType, String value, Boolean ignoreCase)
at Network.Converter.PacketConverter.DeserialiseObjectFromReader(Object obj, PropertyInfo propertyInfo, BinaryReader binaryReader) in /home/lord/Dev/Network/Network/Network/Converter/PacketConverter.cs:line 358
Interesting is, that the variable "bla" is empty in 1/5 times. Either there is an issue while serializing or deserializing.
at System.Threading.CancellationToken.ThrowOperationCanceledException()
at Network.Connection.InvokeWork() in C:\Users\Kyle\Desktop\tol\Network\Network\Connection.cs:line 680
Followed by:
System.ObjectDisposedException
HResult=0x80131622
Message=Cannot access a disposed object.
Object name: 'System.Net.Sockets.Socket'.
Source=System.Net.Sockets
StackTrace:
at System.Net.Sockets.Socket.get_Available()
at System.Net.Sockets.TcpClient.get_Available()
at Network.TcpConnection.ReadBytes(Int32 amount) in
TcpConnection.cs:line 153
The client is in Unity while the server is running in .Net Core 2.0. I'm on the no bluetooth branch. All the exceptions are on the server. It seems some data is passed between the two (including the massive initial packet I send) before this happens.
Hello
So after compiling a .net 4.7.2 project it seems the bluetooth dependency compiles 2 libraries in .net 3.5 - InTheHand.dll and InTheHand.Devices.Bluetooth.Dll
Is it possible to remove the bluetooth dependency ? In this case its a project that will not run well in 3.5, its a Unity3D project.
We trying to import the network library inside Unity.
Thanks alot for any attention
While running this code (only for testing purposes of course) I get a disposed object access on the StopTCPListener call. removing this calls makes the code run flawlessly (without stopping the listener of course)
serverConnectionContainer = ConnectionFactory.CreateServerConnectionContainer(Constants.Ports.VenueTCPReceiverPort);
serverConnectionContainer.ConnectionLost += (a, b, c) => Console.WriteLine($"{serverConnectionContainer.Count} {b.ToString()} Connection lost {a.IPRemoteEndPoint.Port}. Reason {c.ToString()}");
serverConnectionContainer.ConnectionEstablished += ReceivedConnectionHandler;
serverConnectionContainer.CloseTCPConnections(CloseReason.ServerClosed);
serverConnectionContainer.StopTCPListener();
I've started work on another project using your Network library, and I'm trying to use the Nuget version, but I'm not able to resolve dependencies:
Attempting to resolve dependencies for package 'Network.5.2.2.6' with DependencyBehavior 'Lowest'
Unable to resolve dependency 'InTheHand.Devices.Bluetooth'. Source(s) used: 'nuget.org', 'Microsoft Visual Studio Offline Packages'.
Now, I can ignore this dependency and just install it, but then I can't get it to run due to the missing dependency (even if I don't want to use Bluetooth). Is there a way I can disable Bluetooth so I don't have to have this dependency while still using the Nuget library?
Previously I have just downloaded InTheHand.Devices.Bluetooth from github and manually referenced it.
This affects Connection.cs solely, as its the only partial class.
Declaration in Connection.cs (Old style):
internal void Init()
{
InitAddons();
...
}
And in ConnectionAddons.cs (Old style):
private void InitAddons()
{
...
}
Declaration in Connection.cs (New style):
partial void InitAddons();
internal void Init()
{
InitAddons();
...
}
And in ConnectionAddons.cs (New style):
partial void InitAddons()
{
...
}
New declaration would use a partial method to improve code understanding for newcomers and for people who are browsing the library. They would instantly know that the InitAddons method is declared in the partial class, rather than looking for it in vain in Connection.cs.
Hi! While testing this library I noticed that it fails sending/receiving custom made class packets with the AssemblyDoesNotExist message. The source code for the failing project is here.
The code is nothing else but basically the one provided in the examples section.
The library is used to comunicate between a desktop server(DesktopServer.cs) and xamarin.android client(MainActivity.cs).
Sending raw data works well on the other hand.
If I do the following in the Client:
tcpConnection.Close(Network.Enums.CloseReason.ClientClosed);
it closes the connection but the connection remains there, you can see that in Process Hacker in Network tab. Any solution for this?
Use existing RSA to establish a AES secured connection.
And would aot matter at all?
I've been looking for a library that does pretty much exactly this. I wanted the ability to serialize as well as send raw. I'm super excited to give this library a try and very thankful you've created it!
One thing I think it's missing, and it may be out of your scope, but do you have any plans on implementing encryption? Unfortunately, the complexity of your code is above my current skill level and I am unable to see a simple way of adding the encryption myself.
Ideally, I'd like to pass an RSAParameters to the server and have it send the modulus and exponent to the client which then encrypts an AES and HMAC key with the received public key, sends it back to the server, and initializes AES for all incoming packets from that client. This could happen transparently, decrypting the packet before any of the handlers are called if it were implemented into the library.
It looks to me like it could go in ReadWork (Connection.cs), just before reading the packetType, Length, and Data. However, ReadBytes seems to only have the ability to remove the read bytes.
With my current skill level, I don't think I'd be able to do this justice and would likely have to resort to encrypting the raw packets only or finding another library that at the very least implements AES, and do the key exchange manually.
Again, thanks for taking the time to write this and taking the time to read my request!
Example project: https://github.com/LostSoulfly/NetworkServerTest/
Reason: SecureClientConnectionContainer receives the public and private key after the ClientConnectionContainer starts to open a connection to the server. Thus, keys are unknown and the connection will fail on initialize.
The code is as follows
static void Main(string[] args) {
//1. Establish a connection to the server.
container = ConnectionFactory.CreateClientConnectionContainer("127.0.0.1", 5560);
//2. Register what happens if we get a connection
container.ConnectionEstablished += ConnectionEstablished;
container.AutoReconnect = false;
container.ConnectionLost += Container_ConnectionLost;
Console.ReadKey();
}
private static void ConnectionEstablished(Connection connection, ConnectionType type) {
Console.WriteLine($"{type.ToString()} Connection established to
{connection.IPRemoteEndPoint}");
//Register Packet Handler for the types of incoming data
connection.ConnectionClosed += (CR, C) => { Console.WriteLine($"{CR} {C}"); };
connection.RegisterStaticPacketHandler<ResponsePacket1>(async (p, c) => {
Console.WriteLine("ResponsePacket1");
});
connection.RegisterStaticPacketHandler< ResponsePacket2>(async (p, c) => {
Console.WriteLine("ResponsePacket2");
});
connection.Send(new RequestPacket1());
connection.Send(new RequestPacket2());
the server reads and send the packet fine but when client gets a response only the first declared handler is called
Any help as to why this doesn’t work would be greatly appreciated
I'm using library for transferring large amounts of raw data and explicitly disabled logging for all connections by setting Connection.EnableLogging
to false.
The problem is that profiler still shows great cpu consumption in Network.Logging.NetworkLog.LogPacket
function. This happens because of Log(tableOutPut.ToStringAlternative())
which allways calls ToStringAlternative()
method (before checking EnableLogging
).
Profiler data shows that the method uses about 50% of cpu.
In any trivial example, including the ones from the docs, if I have a client and server, both with ConnectionLost event handlers set, these are never called. If I kill the client with the server connected (which works fine and is sending data) or with the client connected and I kill the server, it just waits and nothing happens. Tested on Windows, Linux, Mac. Am I missing something? Is there a complete example showing where it works as for me the example for the docs does not show connection lost either when the client is gone.
Hello! I'm using the no bluetooth branch, but I'm getting a "InvokePacketThreadException" disconnection reason that I suspect is explained in issue 54. Is is it possible to update the branch to the latest?
if i am trying to send a big byte array(3 mb) using connection.SendRawData(key, data[]); the client is disconnecting for the reason timeout
A lot of the fields in many classes are not marked readonly but assigned at instantiation and never touched again. An example would be Connection.requestResponseMap. Here it should never be reassigned (we would lose all registered response packets). Thus it should be clearly marked as such, with the 'readonly' keyword. In fact, all similar fields should also be marked with 'readonly'.
The ClientConnectionContainer forces UDP and TCP.
The ServerConnectionContainer on the other hand is able to disable UDP. If the ClientConnectionContainer starts a UDP connection, the TCP connection will be killed server-side. No communication is possible.
The ServerConnectionContainer only needs to drop the UDP connection.
The ClientConnectionContainer needs to ask for UDP permission before starting one.
For example, Connection.cs.
Old style (More verbose):
readStreamThread = new Thread(ReadWork);
readStreamThread.Priority = ThreadPriority.Normal;
readStreamThread.Name = $"Read Thread {IPLocalEndPoint.AddressFamily.ToString()}";
readStreamThread.IsBackground = true;
New style (Less verbose):
readStreamThread = new Thread(ReadWork)
{
IsBackground = true,
Priority = ThreadPriority.Normal,
Name = $"Read Thread {IPLocalEndPoint.AddressFamily.ToString()}"
}
The new syntax is cleaner and less verbose, so helps with readability. Also it looks pretty :)
Funny thing. In WPF Application (client) we have to start connection in a new thread or exception will happen on server side.
tried on new wpf project with same code as on console proejct.
https://pastebin.com/dHyDBePh
^ here is Client class code, its simple connection without any packet handler. New thread works for me.
Using hard coded values, it is possible to get the exception. Does not happen all the time, far from it. But when it happen it usually breaks the operations.
Nullable-Enums currently aren't serializeable.
Network/Network/Async/ChickenReceiver.cs
Line 119 in 3df5e9c
The app that works perfectly when deployed on emulator but when deployed on device the connection closes with assembly doesnt exist error Note the packets are defined in the external lib both Android app and windows form server app reference tested both Net framework clasic lib and net standard lib but it doesn't work
Between point 1. and 2. the server may already send a packet with the rawData key provided within step two. However, the client doesn't have that key yet. Due to the Dict impl. following exception will be risen:
{System.Collections.Generic.KeyNotFoundException: The given key 'LoginServerRequestHandshake1' was not present in the dictionary.
at System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (TKey key) [0x0001e] in /Dictionary.cs:226
at Network.Utilities.PacketHandlerMap.get_Item (System.String key) [0x00000] in PacketHandlerMap.cs:46
at Network.Connection.HandleDefaultPackets (Network.Packets.Packet packet) [0x003c0] in k\Connection.cs:851
at Network.Connection.InvokeWork () [0x00033] in \Connection.cs:669 }
Expected behaviour:
Attached, there is some small scripts which reproduce the error.
Issues seems to be a listener of some sort which is not closed when it should which in turn, makes it create 2 connections instead of one when the client is reconnected.
No exceptions are printed to the console and no exception object is propagated to the exposed API. This makes it difficult to determine why the connection/request is failing. The CloseReason
is not enough information to adequately debug.
For example, I am performing this operation on an established connection:
var result = await clientContainer.SendAsync<TestResponse>(request);
It is erroring somewhere, and I have no idea why, the ConnectionLost
event is raised with CloseReason.NetworkError
and I get an empty TestResponse
object, but that is all the information I have.
Is there any way to receive more detailed information on why a SendAsync
call on a ConnectionContainer
is failing? Perhaps being able to subscribe to an ErrorOccurred
event or something similar?
*Edit
To clarify, I am not asking for help on debugging this particular error, I figured out what I was doing wrong. Just suggesting that the debugging process could be made less painful.
Hi,
i want to send some data and everythime the client kill the connection with the reason:
// Zusammenfassung: // The assembly for the incoming packet is not available. Make sure that every project // is including that assembly. AssemblyDoesNotExist = 12
`// Clientcreation in the mainWindow
client = ConnectionFactory.CreateClientConnectionContainer(IP, Port);
client.ConnectionEstablished += verbunden;
// connected
private void verbunden (Connection co, ConnectionType type)
{
statusmeldung("Status: Verbindung zum Server steht");
if (type == ConnectionType.TCP)
{
connection = co;
connection.ConnectionClosed += verbindung_beendet;
connection.RegisterPacketHandler<translation_text>(Empfange_uebersetzung, this);
}
}
//the sending of the data
private void Button_Click(object sender, RoutedEventArgs e)
{
translation_text temp = new translation_text();
temp.s_original = tb_1.Text;
temp.s_original_sprache = " ";
temp.s_translate = " ";
connection.Send(temp,connection);
lbl_status.Content = "Status: Es wird nach einer Übersetzung in der Datenbank gesucht ...";
}
// and the class who i want to send
public class translation_text : RequestPacket
{
public string s_original { get; set; }
public string s_translate { get; set; }
public string s_original_sprache { get; set; }
}
`
thank you
Edit: Report fom logging:
+-----------+---------------+---------------------+-----------------------------------------------------------------------------+----------------------+
| Direction | Type | Local | ASCII | Packet |
+-----------+---------------+---------------------+-----------------------------------------------------------------------------+----------------------+
| Outgoing | TcpConnection | 192.168.11.10:53439 | ?H??bersetzungstool, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null? | AddPacketTypeRequest |
+-----------+---------------+---------------------+-----------------------------------------------------------------------------+----------------------+
+-----------+---------------+---------------------+------------------------+--------------+
| Direction | Type | Local | ASCII | Packet |
+-----------+---------------+---------------------+------------------------+--------------+
| Incoming | TcpConnection | 192.168.11.10:53439 | �AssemblyDoesNotExist? | CloseRequest |
+-----------+---------------+---------------------+------------------------+--------------+
Hallo :)
ich bekommen wenn ich eine Klasse von meinem "Server" an meinem "Client" senden möchte die Fehlermeldung "WritePacketThreadException" und die TCP-Verbindung (über ConnectionFactory.CreateSecureClientConnectionContainer (S_IP, S_port, 2048); aufgebaut) bricht ab.
Problemklasse:
public class Nutzer2 : RequestPacket { public string id { get; set; } public string Nutzername { get; set; } public string Anzeigename { get; set; } //public byte[] Nutzerlogo { get; set; } public string Nutzerebene { get; set; } public string Passwort { get; set; } public string Bemerkung { get; set; } [PacketIgnoreProperty] public bool valide { get; set; } public Nutzer2() { this.Anzeigename = null; this.Passwort = null; this.id = null; this.Nutzername = null; this.Nutzerebene = null; this.Bemerkung = null; this.valide = false; } }
Was aber dagegen problemlos funktioniert ist:
`public class chat_message : RequestPacket
{
public string _nachricht { get; set; }
public chat_message()
{
}
public chat_message(string temp)
{
this._nachricht = temp;
}
public string get_message()
{
return _nachricht;
}
}`
leider habe ich keine Idee woran das liegen könnte, bzw. wie ich den Fehler herausfinden kann
If i want to send a rawdata to a completely different server which doesnt use this library, do I hve to give a key? Should i make it an empty string?
Affecting mainly Connection.cs and UdpConnection.cs (that ive seen so far). In internal methods there are remenants of a write lock (in parameters and unused fields or properties). Im assuming this is from the now-obsolete connection locking feature. These should be removed (or at least marked Obsolete) for the next release, so as to simplify and clean up the internal API.
when i send a message it will trigger InvokePacketThreadException,what should i do?
Line 226 in 7830209
João Paul: Hello. How can I change the timeout? I used to simply set it but now it seems to be private
I started writing a game server using this library. I used another library for this, however after i swapped up i noticed packets were not being recieved.
I wrote a small test code following the examples to see if i did something wrong and it seems the example code is not working, or maybe i missed something very important.
This is the test code im using. Server never recieces the client request, no errors.
private ServerConnectionContainer serverConnectionContainer = null;
private ClientConnectionContainer clientContainer;
public void SetupClient()
{
//1. Establish a connection to the server.
clientContainer = ConnectionFactory.CreateClientConnectionContainer("127.0.0.1", 4444);
clientContainer.ConnectionEstablished += clientConectionOk;
}
public void SetupServer()
{
serverConnectionContainer = ConnectionFactory.CreateServerConnectionContainer(4444, false);
serverConnectionContainer.ConnectionEstablished += serverRecievedClient;
//serverConnectionContainer.AllowUDPConnections = true;
serverConnectionContainer.Start();
}
// CLIENT
private void clientConectionOk(Connection connection, ConnectionType type)
{
clientContainer.RegisterPacketHandler<CalculationResponse>(calculationResponseReceived, this);
connection.Send(new CalculationRequest(10, 10), this);
}
private void calculationResponseReceived(CalculationResponse response, Connection connection)
{
var result = response.Result;
Console.WriteLine($"Answer received {response.Result}");
}
// SERVER
private void serverRecievedClient(Connection connection, ConnectionType type)
{
connection.RegisterStaticPacketHandler<CalculationRequest>(calculationReceived);
}
private static void calculationReceived(CalculationRequest packet, Connection connection)
{
connection.Send(new CalculationResponse(packet.X + packet.Y, packet));
}
// MYN TEST
[Test]
public void Test()
{
SetupServer();
SetupClient();
//clientContainer.Send(new CalculationRequest(1, 5), ConnectionType.TCP);
}
```
Close a TCP connection within a packetReceived on the server side. The connection count doesn't decrease. Bug not confirmed, requires evaluation.
Sending larger packets causes connection issues with SecureServer/Client sometimes. It appears to be UDP most of the time, and only on larger packets (100KB~ or more). It throws the following exceptions:
For clarification, I added a test string to the packet and filled it with 100,000+ characters.
Exception thrown: 'System.Collections.Generic.KeyNotFoundException' in mscorlib.dll
Exception thrown: 'System.Collections.Generic.KeyNotFoundException' in mscorlib.dll
Exception thrown: 'System.Net.Sockets.SocketException' in System.dll
Exception thrown: 'System.Threading.ThreadAbortException' in mscorlib.dll
Exception thrown: 'System.Threading.ThreadAbortException' in Network.dll
When I'm using secure connection, as soon as I connect client to server, the server throw a Task canceled error. Here is the trace that appear in the console. If you need more info, just ask me.
'PulsarWindowsService.exe' (CLR v4.0.30319: PulsarWindowsService.exe): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Transactions.resources\v4.0_4.0.0.0_fr_b77a5c561934e089\System.Transactions.resources.dll'. Module was built without symbols.
System.Transactions Critical: 0 : <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Critical"><TraceIdentifier>http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/Unhandled</TraceIdentifier><Description>Exception non prise en charge</Description><AppDomain>PulsarWindowsService.exe</AppDomain><Exception><ExceptionType>System.Threading.Tasks.TaskCanceledException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType><Message>Une tâche a été annulée.</Message><StackTrace> à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
à Network.Async.ChickenReceiver.&lt;Send&gt;d__2`1.MoveNext()
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
à Network.Connection.&lt;SendAsync&gt;d__108`1.MoveNext()
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
à Network.RSA.RSAConnection.&lt;ExchangePublicKeys&gt;d__39.MoveNext()
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
à System.Runtime.CompilerServices.AsyncMethodBuilderCore.&lt;&gt;c.&lt;ThrowAsync&gt;b__6_1(Object state)
à System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
à System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
à System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
à System.Threading.ThreadPoolWorkQueue.Dispatch()
à System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()</StackTrace><ExceptionString>System.Threading.Tasks.TaskCanceledException: Une tâche a été annulée.
à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
à Network.Async.ChickenReceiver.&lt;Send&gt;d__2`1.MoveNext()
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
à Network.Connection.&lt;SendAsync&gt;d__108`1.MoveNext()
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
à Network.RSA.RSAConnection.&lt;ExchangePublicKeys&gt;d__39.MoveNext()
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
à System.Runtime.CompilerServices.AsyncMethodBuilderCore.&lt;&gt;c.&lt;ThrowAsync&gt;b__6_1(Object state)
à System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
à System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
à System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
à System.Threading.ThreadPoolWorkQueue.Dispatch()
à System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()</ExceptionString></Exception></TraceRecord>
System.Transactions Critical: 0 : <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Critical"><TraceIdentifier>http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/Unhandled</TraceIdentifier><Description>Exception non prise en charge</Description><AppDomain>PulsarWindowsService.exe</AppDomain><Exception><ExceptionType>System.Threading.Tasks.TaskCanceledException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType><Message>Une tâche a été annulée.</Message><StackTrace> à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
à Network.Async.ChickenReceiver.&lt;Send&gt;d__2`1.MoveNext()
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
à Network.Connection.&lt;SendAsync&gt;d__108`1.MoveNext()
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
à Network.RSA.RSAConnection.&lt;ExchangePublicKeys&gt;d__39.MoveNext()
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
à System.Runtime.CompilerServices.AsyncMethodBuilderCore.&lt;&gt;c.&lt;ThrowAsync&gt;b__6_1(Object state)
à System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
à System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
à System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
à System.Threading.ThreadPoolWorkQueue.Dispatch()
à System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()</StackTrace><ExceptionString>System.Threading.Tasks.TaskCanceledException: Une tâche a été annulée.
à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
à Network.Async.ChickenReceiver.&lt;Send&gt;d__2`1.MoveNext()
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
à Network.Connection.&lt;SendAsync&gt;d__108`1.MoveNext()
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
à Network.RSA.RSAConnection.&lt;ExchangePublicKeys&gt;d__39.MoveNext()
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
à System.Runtime.CompilerServices.AsyncMethodBuilderCore.&lt;&gt;c.&lt;ThrowAsync&gt;b__6_1(Object state)
à System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
à System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
à System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
à System.Threading.ThreadPoolWorkQueue.Dispatch()
à System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()</ExceptionString></Exception></TraceRecord>
System.Transactions Critical: 0 : An unhandled exception of type 'System.Threading.Tasks.TaskCanceledException' occurred in mscorlib.dll
Une tâche a été annulée.
Instead of aborting each thread, use a cancellationToken to signal the end of the work task. (Socket may require additional investigation)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.