怎么接收任意远程ip和端口号程序,然后确定接收到的数据来自那个IP和端口号

如何接收任意远程ip和端口号程序,然后确定接收到的数据来自那个IP和端口号?
我想用GPRS模块向服务器端发送信息,服务器端也可以向GPRS下发命令。
想在GPRS模块端向固定域名和端口发数据,服务器端通过接收到的数据确定发送方的地址,
请问该如何确定发送方的地址和端口号呀?
      IPEndPoint ipendpoint = new IPEndPoint(IPAddress.Any, 0);
            byte[] receiveByte = udp.Receive(ref ipendpoint);
            string returnData = Encoding.Default.GetString(receiveByte);
想这样编程,可是接收不到数据。
我的GPRS端是可以主动发送心跳包的!
请会的帮帮忙,卡住了!拜托!拜托!
------解决方案--------------------
使用远程(例如另外一个省)的pc客户端能够访问到你的服务器吗?



写 IPEndPoint ipendpoint = null; 就行了,用不着 new 一个对象实例。


从手机通讯,最好使用 TCP 或者 HTTP,而不是 UDP。
------解决方案--------------------
无线也是一种方法,不是协议,照样在手机端写一个TCP的APP一样通讯啊
------解决方案--------------------
如果是IP层的包,可以试试fastCSharp,数据链路层的话需要些驱动或者winpcap
using System;
using fastCSharp;

namespace fastCSharp.demo.rawSocketListener
{
    class Program
    {
        /// <summary>
        /// 原始套接字监听
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            using (fastCSharp.net.rawSocketListener rawSocket = new fastCSharp.net.rawSocketListener(getPacket, System.Net.IPAddress.Parse("192.168.1.100")))
            {
                Console.ReadKey();
            }
        }
        /// <summary>
        /// 数据包处理
        /// </summary>
        /// <param name="data">数据包</param>
        private static void getPacket(subArray<byte> data)
        {
            fastCSharp.net.packet.ip ip4 = new fastCSharp.net.packet.ip(data);
            if (ip4.IsPacket)
            {
                switch (ip4.Protocol)
                {
                    case fastCSharp.net.packet.ip.protocol.Icmp:
                        fastCSharp.net.packet.icmp icmp = new fastCSharp.net.packet.icmp(ip4.Packet);
                        if (icmp.IsPacket)
                        {
                            Console.WriteLine(ip4.Source.toHex8() + " -> " + ip4.Destination.toHex8() + " " + ip4.Protocol.ToString() + " " + icmp.Type.ToString() + " " + icmp.Code.ToString());
                        }
                        else Console.WriteLine("Unknown");
                        break;
                    case fastCSharp.net.packet.ip.protocol.Igmp:
                        fastCSharp.net.packet.igmp igmp = new fastCSharp.net.packet.igmp(ip4.Packet);
                        if (igmp.IsPacket)
                        {
                            Console.WriteLine(ip4.Source.toHex8() + " -> " + ip4.Destination.toHex8() + " " + ip4.Protocol.ToString());