gpt4 book ai didi

C#:未在 Socket.BeginReceive 上调用 AsyncCallback

转载 作者:行者123 更新时间:2023-11-30 16:33:23 28 4
gpt4 key购买 nike

我对 System.Net.Sockets.Socket 的异步 Receive 方法有一个严重的问题。

这是我用来打开连接的代码:

_socket = new Socket(endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
_socket.Connect(endpoint);

byte[] buffer = new byte[1024];
_socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, buffer);

这里是回调方法:

private void ReceiveCallback(IAsyncResult result)
{
byte[] buffer = (byte[])result.AsyncState;
int count = _socket.EndReceive(result);

if (count > 0)
{
// Do something
}

buffer = new byte[1024];
_socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, buffer);
}

问题是 ReceiveCallback 永远不会被调用,尽管套接字已连接。

谁能帮我解决这个问题?

最佳答案

首先,如果 EndRecieve 返回 0 字节,请不要忽略。这意味着连接已被远程端点关闭。

您确定远程端点已向您发送了一些内容吗?我敢打赌,情况并非如此。

我已经完成了很多套接字应用程序,而且我从未遇到过未调用回调的任何问题。

在回调方法中处理异常也很重要。不这样做会使您的应用程序在抛出异常时崩溃。

关于C#:未在 Socket.BeginReceive 上调用 AsyncCallback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3244840/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com