【问题标题】:big prob with serverSocket Send stackserverSocket 发送堆栈的大问题
【发布时间】:2015-11-17 16:53:08
【问题描述】:

好的,这是我的问题...基本上我编写了一个代码并在其中实现了一个计时器..如果我运行将数据发送到服务器并且计时器处于活动状态的“客户端”,则消息堆栈如果我想非常快地发送它们。

示例:代替:

"Hello"

我明白了:

"HelloHelloHelloHelloHelloHelloHelloHelloHello" 堆积起来,如果我想非常快速地发送它们...可以说是 1 毫秒。

有没有办法在服务器获取信息时修复它而无需拆分它们?我不会给出有效的接收代码..这是问题所在:

 private void sends()
{
    if (serverSocket.Connected)
    {
        send = textBox2.Text;
        byte[] buffer = Encoding.ASCII.GetBytes(send);
        serverSocket.Send(buffer);
    }
}
private int s = 0;
private string send = string.Empty;
void Sendata(Socket socket, string stf)
{
    byte[] data = Encoding.ASCII.GetBytes(stf);
    socket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(SendCallback), socket);

}
private void SendCallback(IAsyncResult AR)
{
    Socket socket = (Socket)AR.AsyncState;
    socket.EndSend(AR);
}
private void button3_Click(object sender, EventArgs e)
{
   // timer1.Start();
    //Thread send = new Thread(new ThreadStart(sends));
   // send.Start(); 
    for (int i = 0; i < 50000; i++)
    {
         if (serverSocket.Connected)
    {
        send = textBox2.Text;
        Sendata(serverSocket, send);
    }
    }

}

【问题讨论】:

标签: c# .net server client


【解决方案1】:

您需要一种描述消息的方法。除非您需要能够将换行符作为消息的一部分发送,否则可能在每条消息之后发送一个换行符。如果是这种情况,您可以在每条消息前面加上它的长度。然后接收端将首先解析长度,然后在考虑消息完成之前等待那么多字节。这样一来,多条消息可以在一次大推送中发送,接收端只需按长度解析它们。

【讨论】:

  • 拆分后还是一样的!
  • @KenTavur 您需要了解底层机制不是基于消息的。这是一条溪流。它甚至可以很好地发送一个单独的“Hello”消息。接收者的大脑最终会收到“He”,然后在稍后的阅读中收到“llo”。您需要控制自己的数据。
猜你喜欢
  • 2021-01-04
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
  • 2016-06-27
  • 2015-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多