2011-08-18 39 views
1

我正在WM6的NTRIP客户端上写信。基本上我通过首先发送一个配置从服务器使用套接字获取数据。但是我无法通过同一设备上的GPRS连接进行工作。使用GPRS的WM6套接字

我发送此消息。

Get/HTTP/1.0 
User-Agent: NTRIP client 
Accept: */* 
Connection: close 

对此服务器。

Hostname: mamba.gps.caltech.edu 
Port: 2101 

我让做这个

string message = "GET/HTTP/1.0\r\nUser-Agent: NTRIP client\r\nAccept: */*\r\nConnection: close\r\n\r\n" 
IPAddress ipAddress = Dns.GetHostEntry(hostname).AddressList[0]; 

_NTRIPCaster = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
_NTRIPCaster.Connect(new IPEndPoint(ipAddress, Convert.ToInt32(port))); 
_NTRIPCaster.Send(Encoding.ASCII.GetBytes(message)); 
for (int i = 0; i < 50; i++) //Wait for upto 5 seconds for a response 
{ 
    Thread.Sleep(100); 
    if (_NTRIPCaster.Available > 0) 
    { 
      Byte[] inBytes = new byte[_NTRIPCaster.Available]; 
      _NTRIPCaster.Receive(inBytes); 
      sourceTable += Encoding.ASCII.GetString(inBytes, 0, inBytes.Length); 
      //Check if all of the Source table has been recieved 
      if (sourceTable.Contains("ENDSOURCETABLE")) 
      { 
       sourceTableRecieved = true; 
       break; 
      } 
     } 
} 

这一切工作正常连接,如果我有一个Wi-Fi连接,或设备停靠到一台PC和活动同步共享电脑上网连接。

如果我在PC上切断了网络,并禁用了Wi-Fi,那么它无法将主机名解析为IP地址。甚至没有进入套接字连接。基本上它没有在设备中使用调制解调器并使用GPRS连接。无论GPRS是否连接,都会发生这种情况。

因为我在WM6,我已经看过了连接管理器API - http://msdn.microsoft.com/en-us/library/aa458120

但以下几个其他职位我已经能够找到计算器和其他论坛我一直无法得到它的工作后。有谁知道我如何建立GPRS连接并开始将数据发送到服务器。

回答

1

经过大量的实验后,我得到了它的工作。

从OpenNetCF

ConnectionManager connectionManager = new ConnectionManager(); 
    connectionManager.Connect(false); 
    Thread.Sleep(50); //Give it time to make a connection 

下一步中使用的的ConnectionManager,在SDF,我使用的连接的TCP/IP的方法。老实说,我不确定这与带有TCP协议的套接字有什么不同,因为从我可以告诉TCPClient对象的角度来看,它有一个名为Client的属性,它本身就是一个套接字。剥离下面的代码示例。

 using (NetworkStream ns = _client.GetStream()) 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      ns.Write(messageBytes, 0, messageBytes.Length); 
      for (int i = 0; i < 50; i++) 
      { 
       Thread.Sleep(20); 
       byte[] buffer = new byte[16 * 1024]; 
       int bytes; 
       while ((bytes = ns.Read(buffer, 0, buffer.Length)) > 0) 
       { 
        ms.Write(buffer, 0, bytes); 
       } 
       byte[] data = ms.ToArray(); 
       response += Encoding.ASCII.GetString(data, 0, data.Length); 
      } 

我现在正按预期收到数据并收到数据。

1

如果使用更高级别的网络对象像的HttpRequest那么连接管理器API自动由.NET Framework调用。您有使用底层套接字的原因吗?

+0

我也听说HttpRequest为你管理这个,这很好。我从来没有尝试过使用HttpRequest来访问它,因为我可以在NTRIP上找到每个使用套接字连接的示例。 NTRIP有自己的协议。我必须保持与服务器的连续连接,直到我或服务器选择放弃连接为止。我会诚实地说,这是我第一次使用套接字。 – JonWillis

+0

我不是NTRIP协议家族,但你的代码样本看起来像HTTP。如果NTRIP通过HTTP捎带,那么你仍然可以使用HttpReqest对象。只是一个想法... – tcarvin

+0

无论如何,网上有一堆样品。下面是一个看起来很简单的例子:[链接](http://blogs.msdn.com/b/anthonywong/archive/2006/03/13/550686.aspx) – tcarvin