使用http协议 _Campbellsci论坛问答

你好togehter,

首先祝贺新的CS论坛。:)

使用http协议
_Campbellsci论坛问答

事实上,在获得ppp连接后,我有一个关于使用http协议的问题。是否可以像在浏览器中一样打开标准url?

我从运营商那里得到的ppp ip是一个公共动态ip。

在crbasic编程中应该使用哪个函数

谢谢

新对话如下:

欢迎来到CSI论坛moho,

我不确定我是否理解你的问题。您想让数据记录器像浏览器一样工作吗?还是想浏览到数据记录器?

要帮助您缩小要使用的指令范围,请使用CRBasic编辑器“指令面板”中的下拉框,仅显示 互联网协议 说明书选择说明,然后按“帮助”按钮。在每个指令的“帮助”对话框的顶部都有一个链接,指向 示例程序 .

看看 网页开始/网页结束 说明详细信息和示例。我 认为 那会让你开始的。如果没有,请发布更多关于您正在尝试做什么的详细信息。

当做
珍妮特

新对话如下:

你好,珍妮特,
我在一个类似的问题上找到了答案。我今天做了一些测试。结果是,列出的crbasic代码将执行我想要的操作。

<;粘贴在CRBasic中>;

'CR1000系列数据记录器
'dyndns更新的程序示例
'参考http://www.dyndns.com/developers/specs/syntax.html-原始HTTP GET请求

'声明公共变量
公共PTemp_C
'为dyndns updaate声明变量
公用插座
公共套接字响应为字符串*200
Public SocketGetRequest为字符串*200
公共dyndnshostname为字符串*200
公共dyndnsuth作为字符串*200

'主程序
开始进度
扫描(1,秒,0,0)
'接线板温度测量PTemp_C
面板温度(PTemp_C,_50Hz)
下一次扫描

慢速序列
扫描(10,最小,0,0)
dyndnshostname=“;YOURACCOUNT.dyndns.org“;
'base-64-已加密授权
dyndnsauth=“;用户名:密码;
SocketGetRequest=“套接字获取请求”;获取/nic/update?主机名=“+dyndnshostname+“&myip=ipaddress&通配符=NOCHG[mx=NOCHG&backmx=NOCHG-HTTP/1.0”+CHR(13)+CHR(10)
套接字=TCPOpen(“members.dyndns.org”,801024)
如果套接字<>;0然后
'传输GET请求
串行输出(Socket,SocketGetRequest,“”,0,0)
'根据测试,需要主机请求标头字段
串行输出(套接字,“主机:members.dyndns.org”+CHR(13)+CHR(10),“&”;,0,0)
'根据测试,需要base-64授权请求头字段
串行输出(插座,“授权:基本”+dyndnsauth+CHR(13)+CHR(10),“&”;,0,0)
'根据测试,需要合法的用户代理请求标头字段
串行输出(套接字,“用户代理:公司-设备-版本”+CHR(13)+CHR(10),“&”;,0,0)
“根据测试,需要最后一个空行(回车和换行)
串行输出(插座,CHR(13)+CHR(10),“&”;,0,0)
'捕获GET请求响应以进行调试
串行输入(SocketResponse,Socket,500,“”,200)
结束如果

下一次扫描
结束程序


我现在需要的是在一个子函数中引入dyndns更新过程,并且只有在PPPOpen命令成功时才能使用它,并且我将在状态表中获得IP。

感谢您的帮助;)

新对话如下:

莫霍,

你能解释一下这个程序的作用吗?

谢谢
戴夫

新对话如下:

你好,Moho,
您写道:
>;我现在需要的是带来dyndns更新程序
>;在子函数中,并且仅在PPPOpen
>;命令成功,我将在状态表中获得一个IP。

您可以根据PPPOpen指令的状态调用子例程,如下所示:

<<<<<<<<<<<<<&书信电报;程序<<<<<<<<<<&书信电报;
公共标志为布尔值,P3打开为字符串

'定义子例程
子更新
'在此处输入Sub说明
EndSub公司

'主程序
开始进度
扫描(1,秒,0,0)
P3打开=PPP打开
如果P3Open<>";0.0.0.0”时;然后flag=true
如果flag=true,则调用更新
下一次扫描
结束程序

<<<<<<<<<<<<<&书信电报;结束程序<<<<<<<<<<&书信电报;

如果这能回答你的问题,请告诉我。

祝你周末愉快。
珍妮特

新对话如下:

你好,Janet和IslandMan,
谢谢你的回答。在我阅读IslandMans主题中的问题之前,我已经在这里写下了我的问题,关于“;天气地下上传”;。这对我帮助很大。我可以使用剪下的代码来调整我的代码以供我使用。现在
子程序将用于从PPPopen获得IP之后的更新过程。

@岛民
关于你的问题,代码是做什么的?

好吧,看看我的crbasic程序标题中发布的链接。在那里,我通过dyndns.org链接到了服务的规范
(有可能,这对那些通过连接到数据记录器(例如调制解调器)的通信设备获得“固定公共IP”的人来说并不有趣。这取决于国家和提供商)有了这项服务,我现在可以在互联网上找到我的数据记录器->;动态IP地址的解决方案。

<;来自网页>;
动态DNS(DDNS)允许您创建指向动态IP或静态IP地址或URL的主机名。。。

致以最良好的祝愿,蒂姆

@珍妮特
论坛在不到两天的时间里帮助了我!非常感谢坎贝尔,感谢论坛的决定。它把人组队在一起!竖起大拇指:)
-我认为对于未来,论坛应该使用一些类别,例如crbasic代码片段
-感谢使用ppp子程序

..很抱歉造成误解,英语不是我的母语;)

*最后更新者:moho于2008年3月10日下午12:46*

新对话如下:

尊敬的各位:,

我们有模拟问题。
情况如下:
具有WaveCom Fasttrack GPRS的CR1000。

在CrBasic中,当Wavecom GPRS调制解调器被分配一个来自UMTS网络的新IP地址时,会使用一个慢序列。

“SlowSequence指令允许一条或多条指令以与主程序不同的速率执行。
“SlowSequence用于检查记录器是否已断开与Loggernet的连接,并在必要时重置它
慢速序列

'每分钟
扫描(60秒,1.0)

'如果调制解调器尚未初始化,请关闭自动复位功能
如果没有现代化,那么
串行打开(Modemport,9600,020001000)
“SerialOut功能用于通过数据记录器的一个通信端口传输字符串。
'语法:SerialOut(ComPort,OutString,WaitString,NumberTries,TimeOut)
串行输出(Modemport,“++++”,“+++”,3200)'引起调制解调器的注意
延迟(0,1,秒)'+++保护时间
串行输出(Modemport,“ATZ”+CHR(13),“;0〃时+克莱斯勒(13),3200)
串行输出(Modemport,“AT+WRST=0”+CHR(13),“;0〃时+CHR(13),2200)
串行关闭(模式导入)
modeminitalized=真
结束如果

'检查是否有返回Loggernet服务器的路由
'(将服务器的Pakbus更改为匹配)
“路由功能用于返回PakBus数据记录器的邻居地址(或路由)。
如果路由(4094)<>;4094然后offlinecount=offlinecount+1否则offlinecount=0

'如果十分钟内没有连接
“(或更改以适应-注意,旧链接可能需要长达5分钟的时间才能超时)
如果脱机计数>=6然后
串行打开(Modemport,9600,0200001000)
串行输出(Modemport,“++++”,“+++”,3200)'引起调制解调器的注意
延迟(0,1,秒)'+++保护时间
串行输出(Modemport,“ATZ”+CHR(13),“;0〃时+CHR(13),3100)'重置以确定
'打开最高级别的状态报告WAVECOM特定
串行输出(Modemport,“AT+WIND=255”+CHR(13),“;0〃时+克莱斯勒(13),1200)
'发出软重置命令并等待,直到完全在线(风:4)
串行输出(Modemport,“at+cfun=1”+CHR(13),“at=cfun=1”+风:4〃;,1,5000)
串行关闭(模式导入)'完成
offlinecount=0'重置计数器/计时器
结束如果
下一次扫描结束慢序列

在Loggernet设置中,IPPort设置为启用“可回叫”和“缓存IP地址”。


如果Loggernet在通过固定IP连接到互联网的计算机上运行,则一切正常。
在“;CSI设备配置实用程序“;对于CR1000,
PackBus/TCP服务器设置为固定IP地址


如果Loggernet在连接到internet的计算机上运行
同样通过GPRS(动态DNS通过dyndns.org),当loggernet长时间中断(超过15分钟)时,我们无法连接。
在“;CSI设备配置实用程序“;对于CR1000,
PackBus/TCP服务器设置为MYHOST.dyndns.org


我们怀疑,当慢速序列开始时,对计算机IP地址的CR1000回调例程没有更新。

有人能给我们建议吗

非常感谢

安东尼

新对话如下:

你好,安东尼,
我不能给出建议,但可能会有一些想法。我们仍在测试不同的方法。我们的系统看起来像:

CR1000+CS-GPRS套装
这将在编写的手册cs-gprs.pdf中进行设置。因此,所有设置都应该使用设备实用程序进行。特别是响应代码21,这意味着建立了ppp连接。

LoggerNet设置
LoggerNet PC位于我们公司的网络中,主路由器将向其转发传入端口(例如6785-6790)。我们的公共IP是一个动态IP地址。因为这是一条adsl线路(数字用户线路)。所以我们在公司使用dyndns服务。我们在cr1000的设备实用程序中进行的设置位于ServiceSetting:YOURACCOUNT.dyndns.org:6785中,例如第一个记录器。第二个会得到一个不同的港口。我们当地的坎贝尔经销商说,我们必须用不同的港口来做。

-这些具有所述设置的系统运行14天,没有任何问题。但我们现在从来没有实际的IP地址的ppp(连接)(调制解调器)。这就是为什么我要求在crbasic代码(logger)中也使用dyndns.org服务的原因,就像上面描述的一些主题一样。

对于我们公司来说,拥有完整的通信备份解决方案是非常重要的。我们将在接下来的几周内出现以下情况:

CR1000+cs GPRS(记录仪)<->;记录仪网络(PC)

通用分组无线网络
1.记录器初始化了与PC的通信->;回调cs-gprs.pdf
2.PC初始化与记录器的通信->;在公共动态IP的情况下,需要dns服务来查找系统


在crBasic代码中使用rtime和pppclose/open控制,我们也将使用:

天然气管理
1.如cs gsm中所述,PC初始化了与记录器的通信(例如,如果gprs连接不工作,我们将有时间在一天中使用两个小时,而不设置gprs)
2.记录器初始化了与PC的通信,功能为ModemCallback,可能还有sendvariables。。。(这是一种应该控制的方式,例如,当在串行接口上,调制解调器在设定的时间内看不到传入的RING时。然后它应该自动回叫到电脑。)


我们在欧洲以外有很多系统,但仍然存在一些问题,有时提供商会更改网络设置。而且这个系统已经不可用了。例如,我们认为单一编号方案可能是问题所在。AT+CSNS=4帮助了我们。
这意味着:
当没有提供承载能力信息时,AT+CSNS命令使ME能够接受传入呼叫
例如单一编号方案呼叫或源自模拟设备的呼叫。

有很多事情要做和测试,但我们没有太多时间;)

希望坎贝尔能够开发出一个故障恢复解决方案。

许多问候
蒂姆(莫霍语)

更新
@安东尼
请参阅cs-gprs.pdf手册。在第六页上,您可以通过设备实用程序设置这些参数(AT命令)。

->;我们就是这样做的!

如果您打算在不关闭电源的情况下运行调制解调器
在程序控制下重置调制解调器,建议包含命令
以定期或在拨号过程开始时重置调制解调器。
后者确保调制解调器从GSM网络注销并每次重新连接
拨号前。此过程可以将拨号过程延长10秒左右
可能不会以与所有调制解调器相同的方式工作。这只适用于
记录器操作系统的最新版本,允许使用“;”
强制拨号串延迟。要重置调制解调器,请包含以下命令
AT+CFUN=1位于拨号字符串的开头,后面至少有五个额外的“;”到
在发送后续命令之前,允许调制解调器重置5秒钟。这
将生成完整的拨号字符串,包括APN设置,如下所示:
'AT+CFUN=1;;;;;;AT+CGDCONT=1,“IP”,“服务器名”;ATD*99***1#'时

也许这会对你有所帮助!

问候

*最后更新者:moho于2008年7月10日凌晨3:17*

新对话如下:

蒂姆(莫霍语)

谢谢你提供的信息。
我是新手,所以还是有点困惑。

这是我的项目。我们正在对“;“绿色建筑”;应用

我们将有一台连接到互联网的计算机,在一个单独的位置运行Loggernet。CR1000和NL115将安装在为客人提供互联网功能的酒店内。NL115将连接到酒店的网络上。

如果我理解正确,我们可以在dyndns.org上建立一个帐户hostname@dyndns.org进入NL115。
我们在启用回调和启用现金IP的情况下运行Loggernet。
我们将您的代码放入记录器程序中。记录器告诉Loggernet它有什么IP地址,我们可以通信吗?

我有一个CR1000和NL115在这里通过一个网桥连接到我的无线网络。在把它投入野外之前,我想在这里测试一下。

感谢您在设置过程中提供的任何帮助。

谢谢
戴夫

新对话如下:

你好,Dave(IslandMan),;)

好吧,不,我们现在正在混合。

在您的项目中,您必须按照NL115.pdf手册第1-4页(1.5.2以太网通信)中的说明设置CR1000和NL115。按照步骤1至3进行操作。

步骤1b使用设备配置工具进行设置。。。

步骤1c需要一个IP->;这应该是网络中的一个IP,其中连接了带有NL115的CR1000。例如,酒店网络或您的家庭网络。(通常:192.168.0.2,子网掩码可以是255.255.255.0,网关将是路由器或调制解调器的内部IP,例如192.168.0.1)DHCP使用请参见第2.8节。然后这将自动完成。我更喜欢使用静态IP。

现在你设置了方式,记录器可以与互联网通信(向外),但不能用于传入方向。你需要在路由器/调制解调器中设置一个路由,就像端口转发规则一样,将每个连接从互联网上的端口(例如6785)转发到你在步骤1c中设置的数据记录器IP(nl115)。

大多数路由器/调制解调器(在欧洲)使用已经安装的dyndns.org服务工具和脚本。否则你可以用我在上面发布的脚本试试。这是可行的。(未测试)

注意,检查所有防火墙设置!!!

现在,您的Logger可以从互联网上看到,例如,如果启用了http或ftp!(当然应该转发端口)

您可以按照所述手册的步骤2使用LoggerNet设置。在步骤2b中,应插入一个Ip。如果您的互联网profider使用动态IP,例如:MYLOGGER.dyndns.org/6785或设置路由器/调制解调器的固定IP,您现在可以在那里插入dyndns.org服务的帐户。(我不知道你在用什么!)

LoggerNet然后连接到路由器/调制解调器,然后转发并找到带有数据记录器的nl115。


希望你能理解……;)

另请参阅第2.1.1节。这里有一个crbasic代码的例子,它将对loggernet进行回调(注意:这是通往loggernet PC的IP)

问题:
-什么样的互联网连接?
-动态还是固定IP?
-公共的还是私人的?

问候moho

新对话如下:

大家好,

谢谢你的回复,但这对我的问题没有帮助。

如果记录仪(通过GPRS的动态IP)和CR1000(也通过GPRS的静态IP)之间的连接丢失较长时间,两个站点(记录仪和CR1000)都将从GPRS网络接收到新的IP地址,然后回叫不起作用,因为CR1000不知道运行记录仪的计算机的新IP地址。
当冷态重新启动CR1000(断开电源)时,连接将再次接通。这是因为PakBus/TCP服务器设置“;MYHOST.dyndns.org”;,通过DevConf软件在CR1000中编程,正如我所认为的,在冷重启后会更新。
有没有办法在执行慢速序列时,或者在检查GPRS IP是否更改后,或者…通过CrBasic软件进行更新。。。。?也许Janet在2008年3月10日上午9:01的帖子中提出了类似的建议。


致以诚挚的问候,

安东尼

新对话如下:

你好,安东尼,
我无法测试它,但请尝试以下代码:
问候Tim


'CR1000系列数据记录器
'使用子程序更新dyndns的程序示例
'参考http://www.dyndns.com/developers/specs/syntax.html-原始HTTP GET请求
'请阅读CampbellSci手册:cs_gprs_jul08.pdf第6节

'声明用于测量的公共变量
公共PTemp_C

'声明PPP Ip的公共变量
公用P3打开为字符串*20
公共P3标志为布尔值

'为子例程DNS dyndns updaate声明变量
公用DyndnsSocket
公共DyndnsSocketResponse为字符串*200
公用DyndnsSocketGetRequest为字符串*200
公用DyndnsHostname为字符串*200
公共DyndnsAuth为字符串*200
公用DyndnsMyIP为字符串*20
公用Dyndns通配符为字符串*20
公用DyndnsMx作为字符串*20
公用DyndnsBackMx作为字符串*20

'定义子例程DNS dyndns udpate
子更新
'使用您的dyndns帐户设置
DyndnsHostname=“;YOURACCOUNT.dyndns.org“;
'base-64-已加密授权
'检查例如。http://www.motobit.com/util/base64-decoder-encoder.asp
DyndnsAuth=“;用户名:密码;
DyndnsMyIP=“;ipad地址“;
DyndnsWildcard=“;NOCHG”;
DyndnsMx=“;NOCHG”;
DyndnsBackmx=“;NOCHG”;
DyndnsSocketGetRequest=“;获取/nic/update?主机名=“+DyndnsHostname+“&myip=“+DyndnsMyIP+“&通配符=“+DynDNS通配符+“&mx=“+DynDensMx+“&backmx=“+DynDensBackmx+“;HTTP/1.0”+CHR(13)+CHR(10)
DyndnsSocket=TCPOpen(“members.dyndns.org”,801024)
如果DyndnsSocket<>;0然后
'传输GET请求
串行输出(DyndnsSocket,DyndnsocketGetRequest,“”,0,0)
'根据测试,需要主机请求标头字段
串行输出(DyndnsSocket,“主机:members.dyndns.org”+CHR(13)+CHR(10),“&”;,0,0)
'根据测试,需要base-64授权请求头字段
串行输出(DyndnsSocket,“授权:基本”+DyndnsAuth+CHR(13)+CHR(10),“&”;,0,0)
'根据测试,需要合法的用户代理请求标头字段
SerialOut(DyndnsSocket,“用户代理:公司-设备-版本”+CHR(13)+CHR(10),“&”;,0,0)
“根据测试,需要最后一个空行(回车和换行)
串行输出(DyndnsSocket,CHR(13)+CHR(10),“&”;,0,0)
'捕获GET请求响应以进行调试
串行输入(DyndnsSocketResponse,DyndnsSocket,500,“”,200)
结束如果
EndSub公司

'主程序
开始进度
扫描(1,秒,0,0)
'接线板温度测量PTemp_C
面板温度(PTemp_C,_50Hz)
下一次扫描

慢速序列
扫描(1,最小,0,0)
'Janet于2008年3月10日上午9:01检查PPP IP是否每分钟都有变化
P3打开=PPP打开
如果P3Open<>";0.0.0.0”时;那么P3标志=真
如果P3flag=true,则调用更新
下一次扫描
结束程序

新对话如下:

关于使用动态DNS解决方案的几点警告

1) 如果你使用GPRS连接,许多蜂窝网络公司只提供一个动态的PRIVATE IP地址,如果你的IP地址在一个专用网络范围内,并且你通过路由器连接到互联网。在这种情况下,您在链接的Loggernet端获得的动态DNS条目通常用于路由器,而不是调制解调器,并且不允许您从公共互联网上的PC连接到记录器。

2) 如果你发现动态dns确实有效(你的蜂窝网络提供商发布公共地址,或者你直接在互联网上使用NL115),请确保在Loggernet中选择“;缓存IP地址“;未选中,以确保每次都进行新的查找。

关于Logger是否正在缓存它调用回的服务器URL的查找,我将对此进行检查并发布和更新。理想情况下不应该这样。

辅助电源

新对话如下:

嗨,各位,
感谢提供关于禁用选项“”的信息;高速缓存IP地址”;。非常有用的信息。

你知道或有欧洲使用公共或私人IP的蜂窝网络提供商的名单吗?

我发现了一条有趣的指南:
IPv4寻址和AS指南
GRX/IPX网络基础设施编号
和用户终端

请参阅:http://www.gsmworld.com/documents/prd/ir4040.pdf

有人写道,有时提供商有不同的APN(接入点名称),提供公共或私人IP。

你的经历是什么?

新对话如下:

问候Tim aka moho,

感谢您的投入。我昨天在研究这个,但后来很忙。

我的办公室里有Verizon。有一个无线路由器并可以访问它。我可以在路由器中设置端口转发。我相信我的路由器的IP地址是动态的,也就是说,如果我把它关掉再打开,我会得到一个新的IP地址。(我还没有确认,但会确认的。)

我已经打印并阅读了你的说明好几次了,它开始深入人心。我按照你的建议设置了NL115。
固定IP在我的局域网192.168.1.3
子网掩码255.255.0
IP网关192.168.1.1
DNS服务器192.168.1.1
FTP和HTTP都已启用。

我以前有这个记录器做电子邮件和FTP,所以我知道它可以上网。

我将在dyndns建立帐户,看看我是否能让它发挥作用。如果它在这里工作,如果我能访问那里的路由器并启用端口转发,我应该能够在酒店工作。

将返回报告,希望取得成功。

顺致敬意,
Dave(岛民)

新对话如下:

大家好,

我不知道我是否在关注这一切,但是。。。

请记住;高速缓存IP地址”;设置就是这样做的——启用后,LoggerNet将记住数据记录器上次使用的IP地址。如果禁用此设置,LoggerNet将在每次尝试连接时解析IP地址。

如果IP地址总是在变化,那么缓存的IP可能会出现问题。

我希望这能激发一些想法:)

当做

Dana公司

新对话如下:

如果IP链路的LoggerNet端和CR1000端都是动态的,那么DNS服务可能是最好的选择。我能想到的唯一另一种方法是将CR1000 PakBus服务器/路由器与公共静态IP地址一起放在互联网上,以处理动态连接的双方。LoggerNet和CR1000都可以维护与它的连接,它本质上是两个(或多个)动态IP地址端之间的中间人。然而,如果LoggerNet侧具有静态IP,而CR1000侧具有动态IP和/或防火墙(通常是这种情况),则有另一种方法。

在LoggerNet设置屏幕中,您将配置:

IPPort-启用回叫,仅启用TCP侦听,禁用缓存IP地址(:6785将显示在Internet IP地址字段中),用于回叫的IP端口设置为6785(NL115的默认端口号)

PakBusPort-启用PakBus端口始终打开

CR1000-已启用回拨


使用DevConfig配置CR1000,您可以在“部署”选项卡的“网络服务”选项卡上的“PakBus/TCP服务器”字段中输入LoggerNet计算机连接到Internet的路由器的静态公共IP地址,并将PakBus/TTCP端口设置为6785(默认值)。

在LoggerNet侧的路由器中,将端口6785转发到运行LoggerNet的计算机。如果CR1000侧有防火墙/路由器,则可能不需要对其进行任何操作,除非它阻止出站端口,因为CR1000将进行到LoggerNet计算机的出站连接。

通过此设置,CR1000应启动与LoggerNet计算机的IP连接,LoggerNet电脑应维护该连接,因为启用了PakBus端口始终打开。如果CR1000的IP地址发生变化,它将启动与LoggerNet计算机的新IP连接,并且旧连接将失效。

对于以这种方式启动到同一LoggerNet的连接的所有CR1000设置,您需要在“;用于回叫的IP端口”;在设置屏幕中;PakBus/TCP端口”;并转发LoggerNet侧路由器中的端口。

新对话如下:

我同意Dana关于缓存IP地址点的观点。这就是为什么在我的示例中,我指定了禁用缓存IP地址。我还指定启用“仅TCP侦听”,因为LoggerNet可能无法启动与CR1000的连接,如果它被防火墙保护,则不应尝试。

新对话如下:

我与开发人员核实过,如果该URL的TTL设置已过期,记录器应该查找新的IP。当它试图打开到远程服务器的套接字时,它会这样做。

如果已经建立了与套接字的连接,则当TTL到期时,记录器将不会触发DNS查找,以检查其是否发生了更改(大多数系统不会)。它只会在下次打开套接字时进行查找。

如果Loggernet服务器以可控的方式脱机,并且记录器收到正常的关闭套接字消息,如果处于自动连接模式,它将尝试定期重新打开套接字,检查DNS条目。但是,如果Loggernet在没有干净地关闭套接字的情况下脱机,则记录器可能需要一段时间才能检测到断开的连接,尤其是在PPP链路仍在运行的情况下。

改进这一点的唯一方法是从程序中定期关闭和打开套接字。目前,无法进行DNS查找并将远程设备的IP地址返回到程序,否则可能会让您更早地得到Loggernet服务器已更改其IP地址的指示。

请注意CR800/1000/3000数据记录器操作系统的下一个版本,该版本将在几周后发布,因为它包括一些小的增强功能,特别是在断开连接的定时方面,而且现在有一个ping指令,允许您独立于记录器自己的机制检查连接。

新对话如下:

关于手机网络和固定IP的另一点。在欧洲,只有少数网络提供商直接提供固定IP服务。大多数固定IP服务由第三方提供,第三方在小区网络上提供专门注册的SIM和不同的APN服务器。

当你使用该APN时,你仍然可以获得一个私人IP地址,并通过VPN连接到同一个子网,或者他们将路由器中的地址映射到公共IP地址。

有相当多这样的供应商。据我所知:

Wyless(Wyless.net)和Mobius(http://www.mobiusnetworks.co.uk/)在英国
法国和意大利的关帝派。

如前所述,使用回调过程可以非常成功地工作。更多详细信息可在此处找到:

ftp://ftp.campbellsci.co.uk/pub/csl/outgoing/uk/manuals/cs_gprs_jul08.pdf

新对话如下:

以下是之前发布的用于向dyndns注册的程序的更新版本。这对控制注册新地址的代码进行了修改。原因是,如果你在你的IP没有改变的情况下,每分钟都在dyndns上触发注册请求,你就会被阻止。

这需要更多的测试。如果有人能做到这一点并报告,我们将不胜感激,因为我可能需要一段时间才能做到这一步:


---
'CR1000系列数据记录器
'使用子程序更新dyndns的程序示例
'参考http://www.dyndns.com/developers/specs/syntax.html-原始HTTP GET请求
'请阅读CampbellSci手册:cs_gprs_jul08.pdf第6节

“由APS修改(2008年10月15日),因此检查上一次扫描时的IP,以避免
'被阻止。还稍微整理了一下结构。
“注意:需要测试和输入唯一的公司、设备和版本,以符合DynDNS规范。

'声明用于测量的公共变量
公共PTemp_C

'声明PPP Ip的公共变量
Public P3 Open As String*20,lastIP As String*2,response As String(公共P3打开为字符串*20,最后IP为字符串+20,响应为字符串)


'定义子例程DNS dyndns udpate-现在使用参数。发送记录器认为的IP。
子更新(DyndnsMyIP作为字符串*20,DyndnsSocketResponse作为字符串)

'仅在此子例程中使用的变量
公用DyndnsSocket
公用DyndnsSocketGetRequest为字符串*200

'使用您的dyndns帐户设置-定义为常量
Const DyndnsHostname=“”;YOURACCOUNT.dyndns.org“;
'base-64-用户名的加密授权:密码
'检查例如。http://www.motobit.com/util/base64-decoder-encoder.asp
Const DyndnsAuth=“;用户名:密码;
Const DyndnsWildcard=“;NOCHG”;
常数DyndnsMx=“;NOCHG”;
常数DyndnsBackMx=“;NOCHG”;

DyndnsSocketResponse=“动态套接字响应”";'确保我们检测不到任何响应

DyndnsSocketGetRequest=“;获取/nic/update?主机名=“+DyndnsHostname+“&myip=“+DyndnsMyIP+“&通配符=“+DyndnsWildcard+“&mx=“+DyndnsMx+“&backmx=“+DyndnsBackMx+“;HTTP/1.0”+CHR(13)+CHR(10)
DyndnsSocket=TCPOpen(“members.dyndns.org”,801024)
如果DyndnsSocket<>;0然后
'传输GET请求
串行输出(DyndnsSocket,DyndnsocketGetRequest,“”,0,0)
'根据测试,需要主机请求标头字段
串行输出(DyndnsSocket,“主机:members.dyndns.org”+CHR(13)+CHR(10),“&”;,0,0)
'根据测试,需要base-64授权请求头字段
串行输出(DyndnsSocket,“授权:基本”+DyndnsAuth+CHR(13)+CHR(10),“&”;,0,0)
'根据测试,需要合法的用户代理请求标头字段
SerialOut(DyndnsSocket,“用户代理:公司-设备-版本”+CHR(13)+CHR(10),“&”;,0,0)
“根据测试,需要最后一个空行(回车和换行)
串行输出(DyndnsSocket,CHR(13)+CHR(10),“&”;,0,0)
'捕获GET请求响应以进行调试
串行输入(DyndnsSocketResponse,DyndnsSocket,500,“”,200)
结束如果
EndSub公司

'主程序
开始进度
lastIP=“";'为了明确起见,它在开始时设置为null,因此在第一次连接时注册

扫描(1,秒,0,0)
'接线板温度测量PTemp_C
面板温度(PTemp_C,_50Hz)
下一次扫描

慢速序列
扫描(1,最小,0,0)
'Janet于2008年3月10日上午9:01检查PPP IP是否每分钟都有变化

P3Open=PPPOpen'获取我们当前的IP地址
如果P3Open<>";0.0.0.0”时;然后'如果0.0.0.0不麻烦,因为我们目前没有工作的PPP连接
如果P3Open<>;lastIP然后呼叫更新(P3Open,响应)'IF已更改,然后向dyndns注册新IP
如果响应=“0”;好的”;OR响应=“0”;nochg”;然后lastIP=P3Open'在注册时更新lastIP值OK
结束如果
下一次扫描
结束程序

新对话如下:

你好

终于有时间用我的CR1000和NL115设置测试dyndns.org了。

我在dyndns.org上建立了一个帐户。
我可以ping adamsenv.dyndns.org,然后返回到我的verizon路由器ip地址。
我已经在我的路由器中为我的NL115109.168.1.6的IP地址设置了端口6785的转发
我不确定这个是否正确
Verizon提供的路由器是ActionTec

联网计算机/设备:192.168.1.6
规则名称DNS-域名服务器
TCP 53->;53 1024-65535->;53
UDP 53->;53 1024-65535->;53
WAN连接类型:以太网
转发到端口:6785
这个规则应该在什么时候出现?总是

我已经把adamsenv.dyndns.org:6785放在我的日志中,但它不会连接。

有什么想法吗?

我必须把“;用子程序更新dyndns的程序示例“;在记录器中?

谢谢
岛民

新对话如下:

之前发布的示例是针对记录器直接在互联网上并且可以检测到IP地址的更改的情况。如果它检测到地址更改,则会在dyndns.org重新注册

在您的设置中,记录器位于NAT路由器后面,因此总是有一个固定的内部网络专用IP地址,因此它在初始设置后永远不会回叫,因此最后发布的程序不会工作得太好。

你有很多选择。首先,正如本讨论早期所建议的那样,你应该调查路由器是否支持dyndns本身——现在很多人都支持。如果它做到了,并且设置正确,它将在检测到更改时正确注册自己的地址,这将是最可靠的解决方案。

第二个选项是修改记录器程序,使其只在定期的基础上向dyndns重新注册自己,而不检查自己的IP。然而,如果你的IP没有改变,你就有可能因违反其T&C而被dyndns禁止。

第三种选择是弄清楚记录器如何在互联网上找到自己的明显IP地址(路由器的IP地址),如果发生变化,请重新向dyndns注册。有一些工具可用于基于PC的应用程序(dyndns上有一个),但必须有人在记录器上解决如何做到这一点。


辅助电源

新对话如下:

安德鲁,

感谢您的回复和建议。

我认为最安全的办法是告诉我的客户,他必须为NL115获得一个固定的IP地址,这样它才能在互联网上使用。

当做
戴夫

新对话如下:

固定IP地址始终是最简单的选择!

然而,还有一个想法。如果互联网路由器不直接支持dyndns(正如我所说的大多数新路由器都支持),看看它是否可以设置为在“;路由的“;模式而不是“模式”;NAT”;模式

在路由模式下,内部网络上的设备获得公共IP,路由器以更透明的方式运行,无需端口转发。NL115将直接出现在互联网上,记录器将能够检测到其IP地址的变化,因此发布的最后一个示例程序应该可以工作。

即使对于家庭路由器来说,能够在路由模式下工作也并不罕见,但很少使用,因为它通常将每个路由器限制为一个设备,除非您被分配了一批IP地址(通常是固定的)。

新对话如下:

请检查以下代码以获取提取网关外部世界IP的方法:

www.whatismyip.com有一个URL,当您运行它时,它会返回网关的Ip。
如果接收到成功的数据,则拆分将始终将IP置于阵列的第20个字段。

但请记住,要直接连接入站,您需要一个“正确”的IP,端口需要转发到您的设备,并且您的设备需要本地网络上的静态IP。

史蒂夫


'CR1000系列数据记录器
'若要创建不同的打开程序模板,请键入new
'说明,然后选择模板|另存为默认模板
'日期:
'程序作者:

'声明公共变量
'示例:
公共PTemp,电池电压
Public GetString作为字符串*200
公共返回字符串为字符串*400

公用插座
公共套接字响应为字符串*400
Public SocketGetRequest为字符串*400
公共拆分响应(20)为字符串*50

'声明其他变量
'示例:
'调光计数器

'声明常量
'示例:
'常量PI=3.141592654

'定义数据表
数据表(测试,11000)
数据间隔(0,10,秒,10)
最小值(1,batt_volt,FP2,0,False)
样品(1,PTemp,FP2)
床头柜

'定义子例程
'子
'在此处输入Sub说明
'结束子

'主程序
开始进度

SocketGetRequest=“套接字获取请求”;得到http://www.whatismyip.com/automation/n09230945.asp"+CHR(13)+CHR(10)
扫描(10,秒,0,0)
面板温度(PTemp,250)
蓄电池(蓄电池电压)

插座=0
SocketResponse=“套接字响应”";
插座=TCPOpen(“www.whatismyip.com”,801024)
如果套接字<>;0然后
'传输GET请求
串行输出(Socket,SocketGetRequest,“”,0,0)

'根据测试,需要主机请求标头字段
串行输出(插座,“主机:www.whatismyip.com”+CHR(13)+CHR(10),“&”;,0,0)
'CR-LF
串行输出(插座,CHR(13)+CHR(10),“&”;,0,0)

'捕获GET请求响应以进行调试
串行输入(SocketResponse,Socket,900,“”,400)

SplitStr(SplitResponse(),SocketResponse,CHR(10),20,14)




典型的回应
'HTTP://1.1 200可以
日期:2009年9月23日星期三22:07:57 GMT
'服务器:Microsoft IIS/6.0
'X-Powered-By-ASP.NET
'内容长度:14
'内容类型:text/html
'设置Cookie:ASPSESSIONIDSSQBABTB=BKHCFJABGCGOAOOKIBDPECLE;路径=/
'缓存控制:私有
'
' 71.71.71.218

结束如果

调用表测试
下一次扫描
结束程序

*最后更新人:SJG于2009年9月23日下午5:36*

新对话如下:

史提夫,

非常好的例子如何获得动态IP。我正在测试您的代码,但找不到获得响应的方法:

'HTTP://1.1 200可以
日期:2009年9月23日星期三22:07:57 GMT
'服务器:Microsoft IIS/6.0
'X-Powered-By-ASP.NET
'内容长度:14
'内容类型:text/html
'设置Cookie:ASPSESSIONIDSSQBABTB=BKHCFJABGCGOAOOKIBDPECLE;路径=/
'缓存控制:私有
'
' 71.71.71.218

你能解释一下如何得到上面的回复吗。
谢谢

JC公司

新对话如下:

你好

我已经再次粘贴了代码,但添加了更多的注释。
我假设您使用的是loggerNet中的“连接”屏幕,并且您打开了一个数值表,其中加载了所有公共变量。
将所有斜体字复制到CRBasic中,然后运行编辑->;重新生成缩进

还有一件事!不要以20秒的扫描周期部署此应用程序。
WhatIsMyIP.com不会享受这么多请求。
每小时做一次,或者每次启动,或者重置调制解调器。


'我的IP是什么.CR1
'**需要连接到互联网**
“程序向www.whatismyip.com提出请求,并返回请求的源IP。
“sourceIP是网关的IP,而不是记录器的IP。
“此IP的使用仅限于分配给网关的IP为“真实”的网络
'即是一个可正确解析的IP。
“一些移动网络在自己的APN中运行,这不会为您提供入站连接

'声明公共变量
'示例:
公共PTemp,电池电压
调暗i为长

Public Socket“用于存储套接字编号的位置。如果没有套接字,则为0
Public SocketResponse As String*400'用于存储来自whatismyip web服务器的响应的位置
Public SocketGetRequest As String*400'创建请求的位置
Public SplitResponse(20)As String*50'某处将响应拆分为
公用MyGatewayIP作为字符串*50

'定义数据表
'实际上对此代码没有任何应用程序
数据表(测试,11000)
数据间隔(0,20,秒,10)
最小值(1,batt_volt,FP2,0,False)
样品(1,PTemp,FP2)
床头柜

'主程序
开始进度

'将GET请求字符串分配给适当的变量
'GET请求是发送到服务器的原始文本
“这相当于IE或FireFox在
'您键入:http://www.whatismyip.com/automation/n09230945.asp
'进入地址栏-试试看!
SocketGetRequest=“套接字获取请求”;得到http://www.whatismyip.com/automation/n09230945.asp"+CHR(13)+CHR(10)

扫描(20,秒,0,0)'一个不错的慢速扫描速率
面板温度(PTemp,250)
蓄电池(蓄电池电压)

'清除套接字变量
插座=0
'清除响应变量
SocketResponse=“套接字响应”";
'清除SplitResponse
对于i=1到20
SplitResponse(i)=“";
下一个i

'现在打开端口80上的whatIsMyIP服务器的套接字
插座=TCPOpen(“www.whatismyip.com”,801024)

'只有打开有效的套接字,我们才能继续
'套接字打开时将分配0以外的数字
“如果成功打开,您通常会被分配101
'(只要您没有打开任何其他套接字或端口)
如果套接字<>;0然后
'**以下三个命令是等效的命令
'当您尝试浏览页面时由IE或FFox发送
' http://www.whatismyip.com/automation/n09230945.asp
'**
“现在我们可以通过Serial Out命令向服务器发送HTTP GET请求。
串行输出(Socket,SocketGetRequest,“”,0,0)
'根据测试,需要一个主机请求头字段。也发送这个
'此+CHR(13)+CHR(10)为回车线馈线,即CR LF
串行输出(插座,“主机:www.whatismyip.com”+CHR(13)+CHR(10),“&”;,0,0)
'现在发送最后的CR LF以最终确定请求
串行输出(插座,CHR(13)+CHR(10),“&”;,0,0)

“现在我们需要监听服务器的响应
'响应存储在套接字响应中
我想不出一个好的终止角色
所以我只等9秒(900)
“另外,要小心Max Chars的事。
“确保SocketResponse足够大,可以容纳所有内容。
串行输入(SocketResponse,Socket,900,“”,400)

'现在,以便轻松提取IP
“从响应中,我将LFs的响应进行了拆分(CHR(10)
“响应中大约有10行,因此大约有10个LF
'您的IP在最后一行
'WhatIsMyIP服务器的典型响应如下:
'HTTP://1.1 200可以
日期:2009年9月23日星期三22:07:57 GMT
'服务器:Microsoft IIS/6.0
'X-Powered-By-ASP.NET
'内容长度:14
'内容类型:text/html
'设置Cookie:ASPSESSIONIDSSQBABTB=BKHCFJABGCGOAOOKIBDPECLE;路径=/
'缓存控制:私有
'
' 71.71.71.218

'我在LF字符处拆分字符串
“我使用选项14,即选项4和选项10的组合
'选项4是标头筛选器
'向右加10就可以证明数组中的结果是正确的,
'表示IP始终位于阵列中的第20个元素中
SplitStr(SplitResponse(),SocketResponse,CHR(10),20,14)

'如果你愿意,你可以分配给一个变量(可能是个好主意
'每个周期都会清除数组
MyGatewayIP=拆分响应(20)
“在这里你可以做更多的事情
'即检查它是否是有效的IP
'每天给自己发一次短信
'将其存储在数据表的单元格中
'通过SendVariables告诉其他记录器或记录器

结束如果
调用表测试
下一次扫描
结束程序

*最后更新人:SJG于2009年1月10日下午6:05*

新对话如下:

你好,蒂姆/珍妮特,

我还在Cr1000/Wavecom<>;Loggernet通过DYNDNS动态更新过程进行路由。这个过程有多成功?

真诚地
詹姆斯

新对话如下:

大家好,

关于PPP协议的使用,我也有一个问题,是否可以使用它通过loggernet从记录器中检索数据?通常数据传输通过PakBus协议进行,但通过GPRS通过PakBus检索图像文件的时间太长,可能是因为PakBus的开销太大。

所以我想知道我是否可以使用PPP来检索图像(只有图像,没有其他数据),但在loggernet中找不到任何东西来这样做,也许这与CRBasic有关?

提前感谢

分享到:

原文链接:,转发请注明来源!
海洋仪器网 仪器使用 使用http协议 _Campbellsci论坛问答
「使用http协议 _Campbellsci论坛问答」评论列表

发表评论