TCP Service& REST API

时间:2017-12-08 12:00:56

标签: c# tcp tcp-ip tcplistener tracker

我有一个GPS追踪器设备,我已经运行了一个TCP / IP服务器代码,它在一个单独的线程和设备中成功建立与每个设备的连接。一分钟后发送其心跳并且服务器回复ON。当我发送命令获取设备位置时,它给我位置,一切正常。

现在我想从使用网络服务的Android设备获取位置,现在我混淆了如何从Android应用程序使用特定设备的运行线程?

2 个答案:

答案 0 :(得分:0)

class Server
{
    TcpListener server = null;
    public Server(string ip, int port)
    {
        IPAddress localAddr = IPAddress.Parse(ip);
        server = new TcpListener(localAddr, port);
        server.Start();
        StartListener();
    }

    public void StartListener()
    {
        try
        {
            while (true)
            {
                Console.WriteLine("Waiting for a connection... ");
                TcpClient client = server.AcceptTcpClient();
                Console.WriteLine("Connected!");

                Thread t = new Thread(new ParameterizedThreadStart(HandleDeivce));
                t.Start(client);
            }
        }
        catch (SocketException e)
        {
            Console.WriteLine("SocketException: {0}", e);
        }
    }

    public void HandleDeivce(Object obj)
    {
        TcpClient client = (TcpClient)obj;
        NetworkStream stream = client.GetStream();

        string data = null;
        Byte[] bytes = new Byte[256];
        int i;

        while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
        {
            data = Encoding.ASCII.GetString(bytes, 0, i);
            Console.WriteLine("{1}: Received: {0}", data, Thread.CurrentThread.ManagedThreadId);

            if (data.StartsWith("##"))
            {
                data = "LOAD";
            }
            else
            {
                data = "ON";
            }

            byte[] msg = Encoding.ASCII.GetBytes(data);
            stream.Write(msg, 0, msg.Length);

            Console.WriteLine("{1}: Sent: {0}", data, Thread.CurrentThread.ManagedThreadId);
        }
        client.Close();
    }
}

答案 1 :(得分:0)

尝试使代码看起来像这样

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Net;
using System.Net.Sockets;
using System.Threading;


namespace ConsoleApplication16
{
    class Program
    {
        const string IP = "123.456.789.000";
        const int PORT_NUMBER = 1234;
        static AutoResetEvent autoEvent = new AutoResetEvent(false);

        static void Main(string[] args)
        {
            GPSClient client = new GPSClient(IP, PORT_NUMBER);
            //start http client or equivalent here

            while (true)
            {
                autoEvent.Reset();

                autoEvent.WaitOne();

                //wait for message from user/client on service port

                string message = client.message;

                //send message back to user/client

            }
        }
    }
    public class WebServer
    {

    }
    public class GPSClient
    {
        const int BUFFER_SIZE = 256;
        TcpClient client = null;
        NetworkStream stream = null;
        Byte[] bytes = new Byte[BUFFER_SIZE];
        public string message { get; set; }



        public GPSClient(string ip, int port)
        {
            try
            {

                Console.WriteLine("Connecting to Device... ");

                client.Connect(ip, port);
                Console.WriteLine("Connected!");
                stream = client.GetStream();

                stream.BeginRead(bytes, 0, BUFFER_SIZE, new AsyncCallback(HandleDeivce), stream);
            }
            catch (SocketException e)
            {
                Console.WriteLine("SocketException: {0}", e);
            }
        }

        public void HandleDeivce(IAsyncResult ar)
        {
            NetworkStream stream = ar.AsyncState as NetworkStream;

            string data = null;

            int i = stream.Read(bytes, 0, BUFFER_SIZE);

            data = Encoding.ASCII.GetString(bytes, 0, i);
            Console.WriteLine("Received: {0}", data);
            message = data;

            if (data.StartsWith("##"))
            {
               data = "LOAD";
            }
            else
            {
               data = "ON";
            }

            byte[] msg = Encoding.ASCII.GetBytes(data);
            stream.Write(msg, 0, msg.Length);

            Console.WriteLine("Sent: {0}", data);

            stream.BeginRead(bytes, 0, BUFFER_SIZE, new AsyncCallback(HandleDeivce), stream);
        }
    }
}