2016-05-24 10 views
0

私はGPSデバイスをたくさん持っています。私のデバイスの1台(クライアントとして)はTCP [3G * 4700201934 * 0009 * LK、0,1,61]で毎分このメッセージを送信します。C#ソケットはデータを受信して​​再び送受信します

と私のサーバはGPSデバイスからのメッセージを読んで返信する必要があります私のサーバーは、GPS位置を取得するために、このメッセージ "[3G * 4700201934 * 0009 * LK]"を送信する必要があることを意味します。このメッセージを送信できない場合、GPSデバイスはGPSの位置情報を送信しません。

マイコード:

TcpListener listener = new TcpListener(IPAddress.Any, port); 
listener.Start(); 

//Sonsuz döngü sayesinde AgAkimini sürekli okuyoruz 
while (true) 
{ 
    Socket client = listener.AcceptSocket(); 
    Console.WriteLine("Connection accepted."); 

    var childSocketThread = new Thread(() => 
    { 
     byte[] data = new byte[100]; 
     int size = client.Receive(data); 
     string fromGPSMessage = string.Empty; 
     for (int i = 0; i < size; i++) 
      fromGPSMessage += Convert.ToChar(data[i]); 
     Console.WriteLine("Recieved data: " + fromGPSMessage); 
     //fromGPSMessage = [3G*4700201934*0009*LK,0,1,59] 
     string serverMessageToGPS = fromGPSMessage.Substring(0, fromGPSMessage.IndexOf(",")) + "]"; 
     //serverMessageToGPS = [3G*4700201934*0009*LK] 
     Encoding ascii = Encoding.ASCII; 
     client.Send(ascii.GetBytes(serverMessageToGPS)); 

     data = new byte[100]; 
     size = client.Receive(data); 
     string newMessagefromGPSMessage = string.Empty; 
     for (int i = 0; i < size; i++) 
      newMessagefromGPSMessage += Convert.ToChar(data[i]); 
     Console.WriteLine("New Message Data: " + newMessagefromGPSMessage); 

     client.Close(); 
    }); 
    childSocketThread.Start(); 
} 

は時々、新しいメッセージデータはありません。

enter image description here

私はデバイスにメッセージを送ることができますが、私はGPSからの第2のメッセージを取得する方法がわかりませんデバイス。

+0

'TcpListener'を使ってTCPサーバを作成するチュートリアルは簡単に見つかりますが、試してみましたか? –

+0

各メッセージの後にクライアントが接続を終了していますか?新しいサーバーを作成してもう一度リスニングを開始するには、コード内に別のループが必要です。 – jdweng

+0

@ C.Evenhuis私はコードを共有 –

答えて

0

TCP OnReceiveイベントを作成する必要があります。新しいデータが来たらOnReceiveイベントが実行され、データを解析できます。

コードでは、client.Receive(data)と書いたので、データを1回受信します。すべてのデータを受信するには、OnReceiveイベントを実装するか、client.Receive(data)メソッドをスレッド化してループに入れることができます。

0

あなたはTcpClient上に読み取る必要があるようですね:MSDN documentation

例そのページにはあなたに返されたデータを読み取る方法も、データを送信する方法を示します、と。

+0

私はコードを共有しました。 @GTHvidsten –

関連する問題