以下TCP服务器端代码 会不会出现发送延时 导致堆积发送

tianhuo_soft 2010-03-15 11:03:13

public partial class Form1 : Form
{
private IPEndPoint MyServer;
private Socket sock;
private Thread myThread;
private Socket[] clientsock;
private int clientnum;
private byte[] buffer;
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
MyServer = new IPEndPoint(IPAddress.Any, 10000);
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Bind(MyServer);
sock.Listen(10);
myThread = new Thread(recvaccept);
myThread.Start();
CheckForIllegalCrossThreadCalls = false;
clientsock = new Socket[65535];
clientnum = 0;
buffer = new byte[65535];
}

private void recvaccept()
{


while (true)
{
clientsock[clientnum] = sock.Accept();
clientsock[clientnum].BeginReceive(buffer, 0, buffer.Length, 0, new AsyncCallback(ReceiveCallback), clientsock[clientnum]);
clientlist.Items.Add(clientsock[clientnum].RemoteEndPoint.ToString());
clientnum++;
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
sock.Close();
myThread.Abort();
}
private void ReceiveCallback(IAsyncResult ar)
{
try
{
Socket a = (Socket)ar.AsyncState;
int read = a.EndReceive(ar);
//clientlist.Items.Add(Encoding.ASCII.GetString(buffer,0,read));
for (int i = 0; i < clientnum; i++)
{
if (clientsock[i].Connected)
{
clientsock[i].Send(buffer, 0, read, 0);
}
}
a.BeginReceive(buffer, 0, buffer.Length, 0, new AsyncCallback(ReceiveCallback), a);
}
catch
{}
}
}
...全文
47 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianhuo_soft 2010-03-15
  • 打赏
  • 举报
回复
应该怎么设置呢
Alden 2010-03-15
  • 打赏
  • 举报
回复
为每一个客户端设置缓冲区.否则会出现数据的覆盖.
tianhuo_soft 2010-03-15
  • 打赏
  • 举报
回复
在客户端比较比较多的情况下 总会出现

两条信息第一条和第二条 并在一起的现象

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧