【问题标题】:Client not sending all data before disconnecting客户端在断开连接之前未发送所有数据
【发布时间】:2011-07-07 14:23:36
【问题描述】:

我目前正在开发服务器/客户端,并且基本已经完成。但是我在关闭和打开测试客户端程序后发送数据时遇到问题。

这就是我的断开连接方法的样子:

public void Disconnect()
    {
        if (m_clientSocket != null)
        {
            m_clientSocket.Shutdown(SocketShutdown.Receive);
        }
    }

而测试数据是这样的:

Client cl = new Client(888, "127.0.0.1");
        cl.Connect(null);
        cl.DataArrived += MyListenerMethod;
        cl.Disconnect();

        cl.Connect("hello");
        cl.SendData("hello2");

现在的问题是当我关闭并重复启动客户端程序时,它有时会发送“hello”和“hello2”,有时只是“hello”。 我很确定这是按照设计工作的,但我希望在程序终止之前发送所有数据,我猜我必须使用延迟或类似的东西来实现这一点。我知道这似乎是一个微不足道的问题,但我想知道这是否可能。

【问题讨论】:

    标签: c# client-server


    【解决方案1】:

    听起来套接字正在缓冲要发送的数据,但在关闭时没有刷新套接字。结果是,如果您尝试过早关闭套接字,则永远不会发送缓冲的数据。

    根据这篇博客文章,您可能对NetworkStream 类有更多的运气。

    (或者使用 WCF 或 .Net 远程处理并让它处理所有这些乱七八糟的东西)

    【讨论】:

    • 所以问题是我使用旧的 String 而不是 NetworkStream 来中继消息?
    • @Siemsen 问题是套接字没有被刷新——我猜m_clientSocketSocket 的一个实例,但我找不到任何关于如何刷新的信息文档中的套接字。
    猜你喜欢
    • 1970-01-01
    • 2015-05-30
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 2021-02-26
    • 1970-01-01
    • 2016-10-24
    相关资源
    最近更新 更多