C# Socket 一个客户端对应多台设备接收数据问题

C# Socket 一个客户端对应多台设备接收数据问题

正在上传…重新上传取消​baidu_235368652015-01-12 05:30:28

由于一些特殊情况,现在我不能做成多台客户端去请求一台服务器的方法。

我编写了一个c# Socket 客户端程序 用来收取多台设备的数据,每一台设备大概5分钟发送一次数据包,我接收解析处理并且存储到数据库.

现在有一个问题,我把多台服务端设备的IP地址和端口存放在XML文件中,然后开始用一台测试可以正常,但是用了多台之后,一直就接收数据就处于第一台设备收,是不是我代码哪里错了 第一次做这个

 
  1. /// <summary>

  2. /// 程序入口

  3. /// </summary>

  4. /// <param name="args"></param>

  5. static void Main(string[] args)

  6. {

  7. //创建一个Socket

  8. foreach (Address addressValue in GetAddress())

  9. {

  10. var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

  11. //连接到指定服务器的指定端口

  12. try

  13. {

  14. socket.Connect(addressValue.IP, addressValue.Port);

  15. Console.WriteLine("{0}:{1}:Conneted...." + "\r\n", addressValue.IP, addressValue.Port);

  16. //实现接受消息的方法

  17. socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), socket);

  18. Console.Read();

  19. }

  20. catch (Exception ex)

  21. {

  22. Console.WriteLine(ex.Message);

  23. }

  24. }

  25. }

  26. /// <summary>

  27. /// 异步接收数据

  28. /// </summary>

  29. /// <param name="ar"></param>

  30. public static void ReceiveMessage(IAsyncResult ar)

  31. {

  32. try

  33. {

  34. var socket = ar.AsyncState as Socket;

  35. var length = socket.EndReceive(ar);

  36. string Ip = (socket.RemoteEndPoint as IPEndPoint).Address.ToString();

  37. int port = (socket.RemoteEndPoint as IPEndPoint).Port;

  38. //分多次接收

  39. byte[] reallData = new byte[length];

  40. Array.Copy(buffer, reallData, reallData.Length);

  41. string data = BitConverter.ToString(reallData) + "\r\n";

  42. StatisticsData(data, Ip, port);

  43. //接收下一个消息(因为这是一个递归的调用,所以这样就可以一直接收消息了)

  44. socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), socket);

  45. }

  46. catch (Exception ex)

  47. {

  48. Console.WriteLine(ex.Message);

  49. }

  50. }

     

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值