【问题标题】:TcpClient not sending messageTcpClient 不发送消息
【发布时间】:2014-07-28 11:28:20
【问题描述】:

我在使用 C# TcpClient 发送数据时遇到问题。

这就是我的代码的样子:

        public Connection()
    {
        try
        {
            client = new TcpClient("127.0.0.1", 7171);
            writer = new StreamWriter(client.GetStream());
            client.Client.NoDelay = true;
            client.NoDelay = true;

            sendFirstPacket();
            while (true)
            {
                if (client.GetStream().DataAvailable)
                    Logger.log(Log_Type.ERROR, "mam cos");

            }
            Logger.log(Log_Type.INFO, "Spoko luz");
        }
        catch (Exception ex)
        {
            Logger.log(Log_Type.ERROR, ex.Message);
        }
        finally
        {
            //client.Close();
        }
    }

    void onSendDone()
    {
    }

    void sendFirstPacket()
    {
        writer.Write((byte)10);
        writer.Write((ushort)2);
        writer.Write((ushort)854);
        UInt32[] k = new UInt32[4];

        k[0] = (12444 << 16) | 12444;
        k[1] = (12444 << 16) | 12444;
        k[2] = (12444 << 16) | 12444;
        k[3] = (12444 << 16) | 12444;

        writer.Write((byte)0); // first byte have to be 0
        writer.Write((UInt32)k[0]);
        writer.Write((UInt32)k[1]);
        writer.Write((UInt32)k[2]);
        writer.Write((UInt32)k[3]);
        writer.Flush();
        //client.GetStream().Write(
    }

不幸的是,几秒钟后,我的服务器上出现“由于线程退出或应用程序请求而中止 i/o 操作”(用 C++ 编写)。 但是,如果我更改此代码,并将 sendFirstPakcet() 放入 while 循环,它将正确发送数据包(我计数超过 700 个循环),然后抛出异常:无法将数据写入传输连接:现有连接被强行关闭远程主机。

 public Connection()
    {
        try
        {
            client = new TcpClient("127.0.0.1", 7171);
            writer = new StreamWriter(client.GetStream());
            client.Client.NoDelay = true;
            client.NoDelay = true;

            sendFirstPacket();
            while (true)
            {
                if (client.GetStream().DataAvailable)
                    Logger.log(Log_Type.ERROR, "mam cos");

                sendFirstPacket();
            }
            Logger.log(Log_Type.INFO, "Spoko luz");
        }
        catch (Exception ex)
        {
            Logger.log(Log_Type.ERROR, ex.Message);
        }
        finally
        {
            //client.Close();
        }
    }

    void onSendDone()
    {
    }

    void sendFirstPacket()
    {
        writer.Write((byte)10);
        writer.Write((ushort)2);
        writer.Write((ushort)854);
        UInt32[] k = new UInt32[4];

        k[0] = (12444 << 16) | 12444;
        k[1] = (12444 << 16) | 12444;
        k[2] = (12444 << 16) | 12444;
        k[3] = (12444 << 16) | 12444;

        writer.Write((byte)0); // first byte have to be 0
        writer.Write((UInt32)k[0]);
        writer.Write((UInt32)k[1]);
        writer.Write((UInt32)k[2]);
        writer.Write((UInt32)k[3]);
        writer.Flush();
        //client.GetStream().Write(
    }

这可能是什么原因?

【问题讨论】:

    标签: c# c++ sockets tcpclient


    【解决方案1】:

    听起来您在服务器端有问题。例如,您可能尝试读取的字节数多于发送的字节数,如果您快速发送许多消息,这似乎是“固定的”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-16
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多