Розетки WM6 с использованием GPRS - PullRequest
1 голос
/ 18 августа 2011

Пишу на NTRIP клиенте на WM6.В основном я получаю данные с сервера, используя сокеты, сначала отправив конфигурацию.Но я не могу заставить его работать через 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, или устройство подключено к ПК, и активная синхронизация разделяет интернет-соединение ПК.

Если я отключу интернет на ПК и отключу Wi-Fi, он не сможет преобразовать имя хоста в IP-адрес.Даже не доходит до сокетных соединений.В основном это не использование модема в устройстве и использование соединения GPRS.Это происходит независимо от того, подключен GPRS или нет.

Поскольку я нахожусь на WM6, я посмотрел на API диспетчера соединений - http://msdn.microsoft.com/en-us/library/aa458120.

Но после нескольких других сообщений, которые мне удалось найти на stackoverflow и других форумах, я не смог заставить его работать.Кто-нибудь знает, как я могу установить соединение GPRS и начать отправку данных на сервер.

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

После долгих экспериментов я заставил его работать.

Использовал ConnectionManager, в SDF от OpenNetCF

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

Теперь я получаю данные, отправленные и полученные, как и ожидалось.

1 голос
/ 18 августа 2011

Если вы используете сетевые объекты более высокого уровня, такие как HttpRequest, тогда .NET Framework автоматически вызывает API диспетчера соединений. Есть ли причина, по которой вы используете низкоуровневые розетки?

...