【问题标题】:C# Socket Send the string multiple times (How to remove the while(true) loop)C# Socket 多次发送字符串(如何删除 while(true) 循环)
【发布时间】:2016-08-12 20:19:53
【问题描述】:

我有一个向 Android JAVA 客户端发送字符串的 C# 服务器。

我的 Android 代码已经收到一次,但我想每秒多次发送该字符串。

        public void serverthread()
    {
        Thread serverthread = new Thread(server);
        serverthread.Start();
    }


    public void server()
    {

        Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        socket.Bind(new IPEndPoint(IPAddress.Parse("192.168.2.5"),6000));
        estado = 1;
        socket.Listen(100);

        Socket accept = socket.Accept();

        while (true)
        {
            buffer = Encoding.Default.GetBytes("Hello World");
            accept.Send(buffer, 0, buffer.Length, 0);
        }
}

当我使用这个 while(true) 循环时,我的 Android 客户端最终崩溃了。如何改进我的实施?

【问题讨论】:

  • 接收到太多数据会崩溃。所以你要么不要发送太多,要么发送得更慢。
  • 如果您知道要发送多少次或有某种退出条件,这会更容易

标签: c# sockets server


【解决方案1】:

我无法完全理解您的问题,但是如果您想防止您的客户端崩溃,您可能必须让它使用您的数据。毕竟客户端比你的服务器慢。 使用 Thread.Sleep(time);像这样

    while (true)
    {
        buffer = Encoding.Default.GetBytes("Hello World");
        accept.Send(buffer, 0, buffer.Length, 0);
        Thread.Sleep(10);
    }

【讨论】:

  • 在再次写入之前是否需要清理缓冲区?
  • 因为在我的 android 应用程序中,我一下子获得了一百万个 Hello Worlds。
  • @Tiago o,你不需要。看,sleep(10) 使线程休眠 10 毫秒。如果您想每秒钟有 1 个“hello world”,请将其更改为 Thread.Sleep(1000)
【解决方案2】:

请改用Timer Class,并在每个Elapsed 事件中将字符串发送到您的Android 客户端

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-31
    • 2012-03-24
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多