私は GPS 車両追跡プロジェクトに取り組んでいます。ここでは、緯度と経度の信号をポート 5000 の特定の IP (静的 IP) に送信するために使用されるデバイスです。合計 17 個のデバイスがあります。
私の問題は、17 台すべてのデバイスがアクティブ化されているときに、適切な時間内にすべてのデバイスから測定値を取得できないことです。これは、デバイス 1 の読み取り値を取得した場合、そのデバイスから 5 ~ 6 個の読み取り値を継続的に取得し、その後デバイス 2 の読み取り値を 5 ~ 6 回継続して取得することを意味します。
ここで私が言おうとしているのは、すべてのデバイスが 1 分ごとに読み取り値 (緯度と経度) を IP に送信するということですが、デバイスから信号を取得すると、5 ~ 6 分後にデバイス 1 からのみ取得されます デバイス 2次に 3 。
私の問題は、アプリケーションがパケットを失っていることです。これは、アプリケーションがデバイス 17 からデータを受信しているときに、アプリケーションが最後の 5 ~ 6 分間の読み取り値を受信しているが、過去 10 ~ 30 分の読み取り値を失っていることを意味します。
1 つのソケットを使用して、すべてのデバイスから同じポートに並列に信号を取得するにはどうすればよいですか?
これは私が実装したコードです:
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);
}
}
}