使用GPRS的WM6插座

时间:2011-08-18 16:26:38

标签: c# sockets windows-mobile network-programming gprs

我在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连接并开始向服务器发送数据。

2 个答案:

答案 0 :(得分:1)

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

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

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