C# Socket发送数据问题。

来源:百度知道 编辑:UC知道 时间:2024/05/17 10:20:22
我在用Socket做一个类似与QQ群的一个系统。
我用了一个集合保存所有连接上的用户远程地址。
服务器在收到任意一个用户的信息时,将数据用循环发往集合中保存的用户。
循环里用socket.SendTo()方法发送,但为什么数据全部发到了集合最后的一个地址那里?比如说:我的集合中保存了10个用户地址,那么服务器就要发10条消息到10个用户那里去,但为什么却只发到了集合中最后的一个用户那里10条?

我的循环代码
for (int i = 0; i < list.Count; i++)
{
byte[] buff = Encoding.BigEndianUnicode.GetBytes(content.ToCharArray());
IPAddress ip = ((IPEndPoint)list[i]).Address;
int prot = ((IPEndPoint)list[i]).Port;
IPEndPoint end = new IPEndPoint(ip, prot);
_socket.BeginSendTo(buff, 0, buff.Length, SocketFlags.None, end, new AsyncCallback(SendCallBack), _socket);
}

望高手帮忙解决下!!!
小弟感激不尽啊。。
问题自己解决了如下:
为什么每次都发到后面那个去了?
是这样的.客户端连接上服务器就构建了 一个Socket。但我没把这个Socket保存。只是保存了地址。
后面在连接一个用户就把前面的Socket给覆盖了,最后发的时候就发到最后那个连接的Socket去了
<

你的代码不全 我也看不出来哪错了
建议你看看发送那一步是否如你所说 真的发送到了你指定的IP, 我还是想说你循环问题 我想了想 只能是因为10条信息被放到了一个集合里 然后在最后一次循环时才统一获得IP地址 并且在最后一次才发送成功 只能这么理解了
---------------------------------------
我没做过这东西 我想应该信息是先存放在内存中然后发送成功,释放内存,关键是你现在10条记录都放在内存中了 却一直没有发送成功 但是你在循环完最后一次的时候 肯定还有其他的操作 是得这10条信息发送了出去 因为IP是最后一次的地址 所以就都发到最后一个人那里了 你是不是可以试试吧循环语句后面的操作放到循环里试试呢?

将内部变量的定义全部放到循环外部.

我看应该不是这个问题,你这样设个断点,试试啊,看从1到10每次的IP地址时候一样,每次是不是执行发送,这样你就能自己了解到到底是那里出了毛病

呵呵.当一个socket还未实现的的时候,就即行下一个sockeT了,所以我认识你在传输信息时,应该开一条线程去实现.