0
我正在开发GPS车辆跟踪项目。这里的设备用于将经纬度信号发送到端口5000上的特定IP(静态IP)。共有17台设备。由于读取延迟导致TcpListener套接字数据丢失
我的问题是,当所有的17设备被激活我没有得到在适当的持续时间从所有设备的读数。这意味着如果我读取了设备1的读数,那么在设备2继续读取5到6个读数时,我将持续从该设备读取5到6个读数。
我在这里要说的是,所有设备都会每隔1分钟向我的IP发送读数(经度和纬度),但是当我从设备获取信号时, 6分钟装置2然后3。
我的问题是,我的应用程序正在丢失数据包。这意味着当我的应用程序从设备17接收数据时,应用程序正在接收最近5到6分钟的读数,但它已经失去了10到30分钟的读数。
如何使用一个插座将所有设备的信号并行连接到同一端口?
这是我的实现代码:
Thread th_main, th_sub;
bool bool_Start_subTH;
Socket Socket_Client;
TcpListener objListener;
private void Form1_Load(object sender, EventArgs e)
{
bool_Start_subTH=false;
th_main = new Thread(GetDataFromClient);
th_main.Start();
}
void GetDataFromClient()
{
objListener = new TcpListener(5000);
objListener.Start();
while (th_main.IsAlive)
{
Socket_Client= objListener.AcceptSocket();
if(!bool_Start_subTH)
{
th_sub=new Thread (SubFunctionThread);
th_sub.start();
bool_Start_subTH=false;
}
}
}
void SubFunctionThread()
{
while(th_sub.IsAlive)
{
if(Socket_Client.Avilable>0)
{
byte[] something = new byte[Socket_Client.Available];
Socket_Client.Receive(something);
string strmessage = Encoding.ASCII.GetString(something);
Listbox1.Items.Add(strmessage);
}
}
}
为每个连接的客户端启动一个接收者线程。并且不要将每条消息添加到接收者线程的UI中,因为这可能是代码无法遵循的问题。 –
你能否改变你的通信协议?我认为在有17个设备的情况下,需要为每个设备建立连接的tcp可能不太方便。我用UDP开发了这个项目没有问题。另外,我也同意Wouter。 – Masoud