从Microsoft C#复制粘贴后的套接字客户端问题工作示例
我已经尝试过Microsoft C#dotNET套接字示例,并且已经有了同步和异步客户端示例,它们都可以在我的intranet上使用远程服务器。我的问题是,当我将异步客户端代码复制粘贴到应用程序中时,send()无法传递到服务器。没有报告错误,报告的发送字节数与请求的长度匹配。服务器按预期报告了连接,因此我被难住了,不知道问题是什么,也不知道如何调试它 由于代码是从MS示例中提取出来的,我不确定发布什么内容会有帮助,但下面是send调用和回调的源代码。检查显示cmdBytes[]的长度应为3字节,而回调bytesSent的长度应为3字节从Microsoft C#复制粘贴后的套接字客户端问题工作示例,c#,sockets,C#,Sockets,我已经尝试过Microsoft C#dotNET套接字示例,并且已经有了同步和异步客户端示例,它们都可以在我的intranet上使用远程服务器。我的问题是,当我将异步客户端代码复制粘贴到应用程序中时,send()无法传递到服务器。没有报告错误,报告的发送字节数与请求的长度匹配。服务器按预期报告了连接,因此我被难住了,不知道问题是什么,也不知道如何调试它 由于代码是从MS示例中提取出来的,我不确定发布什么内容会有帮助,但下面是send调用和回调的源代码。检查显示cmdBytes[]的长度应为3字节
private static ManualResetEvent sendDone = new ManualResetEvent(false);
.... code to generate 3 cmdBytes[]
sendDone.Reset();
// Begin sending the data to the remote device.
mySocket.BeginSend(cmdBytes, 0, cmdBytes.Length, 0, new AsyncCallback(SendCallback), mySocket);
sendDone.WaitOne();
....
private static void SendCallback(IAsyncResult ar)
{
// Retrieve the socket from the state object.
Socket client = (Socket)ar.AsyncState;
// Complete sending the data to the remote device.
int bytesSent = client.EndSend(ar); // debugger reports bytesSent is 3
// Signal that all bytes have been sent.
sendDone.Set();
}
更新后,进一步调查发现问题出在connect()上,可能与此代码无关。将服务器接收部分代码放到服务器上,我认为您向服务器发送了字节,但没有正确处理接收字节。我非常熟悉这些示例,并且非常有调试网络问题的经验。我几乎可以肯定数据是发送的,因为我们没有收到任何异常。如果您没有获得连接,您可能会得到一个异常,客户端将为null,并且可能会在send方法中得到一个异常。因此,错误可能在服务器中,或者您连接到的服务器与正在使用的服务器不同。你可以打开putty而不是服务器来查看是否真的收到了邮件。谢谢你的评论,因为他们为我指明了正确的方向,也就是说发送没有问题!我已经看到插座在连接后会自动断开!我应该编辑这篇文章还是关闭它然后开始一篇新文章?