使用serverSocket发送堆栈的大问题

时间:2015-11-17 16:53:09

标签: c# .net server client

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

示例:而不是:

"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);
    }
    }

}

1 个答案:

答案 0 :(得分:0)

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