1

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

我发送这条消息。

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 的互联网连接,这一切都可以正常工作。

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

由于我在 WM6 上,因此我查看了连接管理器 API - http://msdn.microsoft.com/en-us/library/aa458120

但是在关注了其他一些帖子之后,我已经能够在 stackoverflow 和其他论坛上找到它,但我无法让它工作。有谁知道我如何建立 GPRS 连接并开始向服务器发送数据。

4

2 回答 2

1

如果您使用更高级别的网络对象,例如 HttpRequest,则 .NET Framework 会自动调用连接管理器 API。您使用低级套接字是否有原因?

于 2011-08-18T19:14:01.543 回答
1

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

在 OpenNetCF 的 SDF 中使用 ConnectionManager

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

接下来,我使用了 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);
           }

我现在正在按预期发送和接收数据。

于 2011-09-08T13:42:27.953 回答