C# Socket 一个客户端对应多台设备接收数据问题
正在上传…重新上传取消baidu_235368652015-01-12 05:30:28
由于一些特殊情况,现在我不能做成多台客户端去请求一台服务器的方法。
我编写了一个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);
-
}
-
}