C#开始一个foreach循环问题中发

我有一组是定制归类“包”被coverted为byte [],然后发送给客户端。 当客户端连接,它们与已发送先前的用户加入了先前的“追赶包”更新。 可以把它当作一个聊天室,您与以前的谈话更新。

我的问题是在客户端,我们没有收到的所有信息; 有时候,不是所有..

下面是伪C#代码,我看到了什么

代码如下所示。

lock(CatchUpQueue.SyncRoot) { foreach(Packet packet in CatchUpQueue) { // If I put Console.WriteLine("I am Sending Packets"); It will work fine up to (2) client sockets else if fails again. clientSocket.BeginSend(data, 0, data.length, SocketFlags.None, new AsyncCallback(EndSend), data); } }

这是某种形式的油门问题,或者发送很多次的问题:即:如果有4个数据包队列然后调用开始发送4次。

我已经寻找一个主题similiar,我无法找到一个。 感谢您的帮助。

编辑:我也想指出的是,客户端之间发送继续正常进行任何发送客户端连接后。 但由于某些原因,循环中这个包不是全部发送。

--------------解决方案-------------

我会怀疑你是充斥包的TCP端口,而且可能溢出的发送缓冲区,此时它可能会返回错误,而不是发送数据。

异步I / O的想法是不是让你同时发送数据包无限量,但允许当一个或多个I / O操作线性序列的背景下发生的前台线程继续处理。

由于TCP流是一个串行流,尽量尊重这一点,反过来发送每个数据包。 也就是说,BeginSend后,使用异步回调,当你再次发送之前发送已完成检测。 你被添加睡眠有效地这样做,但是这并不是一个很好的解决方案(您既可以发送数据包比慢可能的,或者您可能不睡足够长的时间和数据包将被再次丢失)

或者,如果你不需要的I / O操作在后台运行,使用简单的foreach循环,但使用同步而非异步发送。

好,

很明显修复,至今仍然困惑我,是为Thread.sleep代码毫秒我发送每个数据包的数量。

所以...

for(int i = 0; i < PacketQueue.Count; i++)
{
Packet packet = PacketQueue[i];
clientSocket.BeginSend(data, 0, data.length, SocketFlags.None, new AsyncCallback(EndSend), data);
Thread.Sleep(PacketQueue.Count);
}

我认为由于某些原因,循环停止从一些发生的电话......嗯,我会继续这个工作,试图找到真正的答案。

分类:C# 时间:2015-03-15 人气:0
本文关键词: C#,插座,的foreach
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.622 (s). 10 q(s)