【问题标题】:Communication with GPRS module using C#, with TCP使用 C# 与 GPRS 模块通信,使用 TCP
【发布时间】:2015-02-13 04:04:38
【问题描述】:

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

【问题讨论】:

    标签: tcp-ip tcplistener gprs


    【解决方案1】:

    请看一下这个TCP server and client example

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

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

    【讨论】:

    • 非常感谢。我正在处理这个问题,并从我的服务提供商那里购买了一个静态 IP。但现在我面临端口转发的问题。我将不得不告诉我的路由器将 http 请求转发到我 LAN 上计算机上的本地 ip。当我尝试在路由器的 NAT(网络地址转换)选项中设置端口时,它不允许我这样做,并说该端口已被 Reouter Web 服务器使用。我被困在这里。我们将非常感谢您的帮助。
    • 阅读您的路由器手册,您应该能够将路由器网络服务器放在另一个端口。在superuser.com提问。
    【解决方案2】:

    这是服务器代码:

    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();
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 2010-10-26
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    相关资源
    最近更新 更多