serverSocket发送堆栈出现大问题
本文关键字:大问题 堆栈 serverSocket | 更新日期: 2023-09-27 18:22:13
好的,这是我的问题。。。基本上,我制作了一个代码,并在其中实现了一个计时器。。如果我运行向服务器发送数据的"客户端",并且计时器处于活动状态,那么如果我想快速发送消息,消息就会堆积起来。
示例:代替:
"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);
}
}
}
您需要一种描述消息的方法。也许在每条消息后都会发送一条换行符,除非您需要能够将换行符作为消息的一部分发送。如果是这种情况,您可以在每条消息前面加上其长度。然后,接收端将首先解析长度,然后等待那么多字节,然后再考虑消息完成。这样,可以在一次大推送中发送多条消息,接收端只需按长度解析它们。