i have a GPS device that will be installed in many trucks.
i can configure the device to send data statement “gps data, device id” over gprs to IP and Port.
i’m using TcpListener class to read the data on the server side.
TcpListener server = null;
private void listen_data()
{
Int32 port = controller_port;
IPAddress localAddr = IPAddress.Parse(this_ip);
server = new TcpListener(localAddr, port);
server.Start();
Byte[] bytes = new Byte[256];
String data = null;
while (true)
{
Console.Write("Waiting for a connection...-- ");
TcpClient client = server.AcceptTcpClient();
Console.Write("Connected!");
data = null; int i;
NetworkStream stream = client.GetStream();
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
}
}
}
that method is listening to what is coming on server ip and port.
-
i want to know if i configured the devices to send to the server on the same port.am i able to listen to all the devices or the first device to connect will be the only one ?
-
is this method the the best way to read the coming data from the devices?
-
do i need to configure a different port for each device and create a new listen thread for each device port?
-
sometimes i’m facing exceptions “the request channel timed out while waiting for a reply”
many thanks in advance for your help.
In your code you are listening to the all devices but only after finish read all data from the first device so you are receiving “the request channel timed out while waiting for a reply”.You should have a different threads each one handle a
tcpClient.so the code should be something like: