使用C#与GPRS通信与GPRS模块

时间:2015-02-13 04:04:39

标签: tcp-ip tcplistener gprs

我已经搜索过很多但是找不到适合我案例的具体答案。我用Arduino Mega 2560制作了使用GPS模块和GSM / GPRS模块的设备,它通过短信发送给我。现在我想用GPRS获取位置参数。我想到使用TCP。我将通过GPRS模块的AT命令发送数据,但我对如何在C#上创建服务器感到困惑。我知道我需要一个静态/公共IP。但我不知道如何获取公共IP,并开始接收我从GPRS模块发送的数据。请我请帮助,因为我是客户/服务器编程的初学者,我正在研究我的最后一年项目。非常感谢提前!

2 个答案:

答案 0 :(得分:0)

请查看此TCP server and client example

您需要一个公共静态IP地址。这是你必须问你的宽带提供商,他们会向你解释他们有的可用选项,可能你需要支付额外的钱。您可以使用当前的公共IP地址,这可能是动态的,但它们不会用来经常更改方式,因此无论何时无法连接,您都必须检查IP是否更改,并设置新的。

这个视频系列可能是一个很好的介绍:https://vimeo.com/38103518

答案 1 :(得分: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();
    }
}