私は多くのトラックにインストールされるGPSデバイスを持っています。 私はgprs上でデータステートメント "gps data、device id"をIPとPortに送信するようにデバイスを設定できます。 私はTcpListener
クラスを使用してサーバー側のデータを読み取ります。gprs経由でデバイスからメッセージを読む
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アドレスとポート番号を確認しています。
私は同じport.am上のサーバに送信するデバイスを構成した場合に接続するすべてのデバイスまたは最初のデバイスを聞くことができ、私は一つだけになります知りたいですか?
この方法は、デバイスから次のデータを読み取るための最良の方法ですか?
デバイスごとに異なるポートを設定し、デバイスポートごとに新しいリスンスレッドを作成する必要がありますか?あなたの助けを事前に
多くのおかげ
時々私が直面してるの例外は「返事を待っている間に要求チャネルがタイムアウトしました」。
エラー「System.Threading.ThreadPool.QueueUserWorkItem(System.Threadingための最良のオーバーロードされたメソッドの試合:
ので、コードは次のようになります。WaitCallback) 'に無効な引数があり、Error2Argument' 1 ':' void 'から' System.Threading.WaitCallback 'に変換できません。 – Ramah
@Ramah:回答が更新されました。 –
多くの感謝私はそれを試していないが、私は古いoneMany多くの感謝を修正した – Ramah