gpt4 book ai didi

c# - 通过 gprs 从设备读取消息

转载 作者:可可西里 更新时间:2023-11-01 02:41:45 28 4
gpt4 key购买 nike

我有一个 GPS 设备,将安装在许多卡车上。我可以将设备配置为通过 gprs 向 IP 和端口发送数据语句“gps 数据,设备 id”。我正在使用 TcpListener 类来读取服务器端的数据。

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);
}
}
}

该方法正在监听服务器 ip 和端口上的内容。

  1. 我想知道我是否将设备配置为发送到同一端口上的服务器。我是否能够收听所有设备或第一个连接的设备将是唯一的设备?

  2. 这种方法是从设备读取即将到来的数据的最佳方式吗?

  3. 我是否需要为每个设备配置不同的端口并为每个设备端口创建一个新的监听线程?

  4. 有时我会遇到异常“请求 channel 在等待回复时超时”

非常感谢您的帮助。

最佳答案

在您的代码中,您正在监听所有设备,但只有在完成从第一个设备读取所有数据之后,您才会收到“请求 channel 在等待回复时超时”。每个线程都应该处理不同的线程一个 tcpClient

所以代码应该是这样的:

TcpListener server = null;
private void listen_data()
{
Int32 port = controller_port;
IPAddress localAddr = IPAddress.Parse(this_ip);
server = new TcpListener(localAddr, port);
server.Start();
while (true)
{
Console.Write("Waiting for a connection...-- ");
TcpClient client = server.AcceptTcpClient();
Console.WriteLine("new client connected");
ThreadPool.QueueUserWorkItem(new WaitCallback(HandleClient), client);//or use Task if 4.0 or new Thread...
}
}

private void HandleClient(object tcpClient)
{
TcpClient client = (TcpClient)tcpClient;
Byte[] bytes = new Byte[256];
String 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);
}

Console.WriteLine(data);
}

关于c# - 通过 gprs 从设备读取消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6649139/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com