我在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连接并开始向服务器发送数据。
答案 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);
}
我现在正在按预期发送和接收数据。