相关疑难解决方法(0)

关闭后,我应该手动处理插座吗?

关闭我还应该打电话Dispose()给我的插座吗?

例如:

mySocket.Shutdown(SocketShutdown.Both);
mySocket.Close();
mySocket.Dispose(); // Redundant?
Run Code Online (Sandbox Code Playgroud)

我想知道因为MSDN文档说明如下:

关闭Socket连接并释放所有相关资源.

c# sockets dispose

32
推荐指数
3
解决办法
2万
查看次数

C#:如何在Socket.BeginReceive回调之前终止套接字?

我有一台服务器接收来自客户端的连接请求.该服务器使用异步Socket.BeginReceiveSocket.EndReceive方法.代码与此处的代码非常相似.

在我的情况下,在调用之后Socket.BeginReceive我需要一个超时,这样如果客户端挂起连接但是在一段固定的时间内根本不传输任何数据,我需要终止连接.

  • 如何在此方案中终止连接?
  • 编程定时器的最佳方法是什么?

c# sockets connection tcp

5
推荐指数
2
解决办法
6738
查看次数

UdpClient.ReceiveAsync 正确提前终止

再会。我和UdpClient它一起工作并有包装。

\n\n

为了阅读,我有异步方法:

\n\n
private async Task<byte[]> Receive(UdpClient client, CancellationToken breakToken)\n{\n    // \xd0\x92\xd1\x8b\xd1\x85\xd0\xbe\xd0\xb4 \xd0\xb8\xd0\xb7 async, \xd0\xb5\xd1\x81\xd0\xbb\xd0\xb8 \xd0\xbf\xd1\x80\xd0\xbe\xd0\xb8\xd0\xb7\xd0\xbe\xd1\x88\xd1\x91\xd0\xbb CancellationRequest\n    breakToken.ThrowIfCancellationRequested();\n\n    UdpReceiveResult result;\n    try\n    {\n        result = await client.ReceiveAsync().WithCancellation(breakToken);\n    }\n    catch(OperationCanceledException)\n    {\n        // \xd0\xa8\xd1\x82\xd0\xb0\xd1\x82\xd0\xbd\xd0\xb0\xd1\x8f \xd1\x81\xd0\xb8\xd1\x82\xd1\x83\xd0\xb0\xd1\x86\xd0\xb8\xd1\x8f \xd1\x80\xd1\x83\xd1\x87\xd0\xbd\xd0\xbe\xd0\xb9 \xd0\xbe\xd1\x81\xd1\x82\xd0\xb0\xd0\xbd\xd0\xbe\xd0\xb2\xd0\xba\xd0\xb8 Task-\xd0\xb0\n    }\n\n    return result.Buffer;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

WithCancellation我提前终止的扩展方法在哪里:

\n\n
public static async Task<T> WithCancellation<T>(\n    this Task<T> task, CancellationToken cancellationToken)\n{\n    var tcs = new TaskCompletionSource<bool>();\n\n    using (cancellationToken.Register(\n        s => ((TaskCompletionSource<bool>)s).TrySetResult(true),\n        tcs))\n        if (task != await Task.WhenAny(task, tcs.Task))\n            throw new OperationCanceledException(cancellationToken);\n\n    return await task;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

手动读取停止后,当我打电话时 …

c# asynchronous udpclient objectdisposedexception

3
推荐指数
1
解决办法
8373
查看次数