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

baidu_23536865 baidu_23536865 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
由于一些特殊情况,现在我不能做成多台客户端去请求一台服务器的方法。

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

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

/// <summary>
/// 程序入口
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
//创建一个Socket
foreach (Address addressValue in GetAddress())
{
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//连接到指定服务器的指定端口
try
{
socket.Connect(addressValue.IP, addressValue.Port);
Console.WriteLine("{0}:{1}:Conneted...." + "\r\n", addressValue.IP, addressValue.Port);
//实现接受消息的方法
socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), socket);
Console.Read();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}

/// <summary>
/// 异步接收数据
/// </summary>
/// <param name="ar"></param>
public static void ReceiveMessage(IAsyncResult ar)
{
try
{
var socket = ar.AsyncState as Socket;
var length = socket.EndReceive(ar);

string Ip = (socket.RemoteEndPoint as IPEndPoint).Address.ToString();
int port = (socket.RemoteEndPoint as IPEndPoint).Port;

//分多次接收
byte[] reallData = new byte[length];
Array.Copy(buffer, reallData, reallData.Length);
string data = BitConverter.ToString(reallData) + "\r\n";

StatisticsData(data, Ip, port);

//接收下一个消息(因为这是一个递归的调用,所以这样就可以一直接收消息了)
socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), socket);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}


我在这里用了一个循环来获取多台设备地址。
...全文
评论 30
收藏 已收藏
分享
返回顶部
baidu_23536865
C# 111,129 成员 642,540 内容