系统环境:
1.无线通讯模块(硬件设备),接在串口上
2.windows xp系统(两台)两个无线通讯模块分别接在两台电脑上(串口),这里要说明的是无线通讯模块相当于链路层
因为通讯只能在串口上进行,而且需要校验,纠错等传输控制的机制,所以我打算采用ppp通讯各位高人有什么看法,不妨说说小弟没有写过ppp方面的东东,给点说明或者是代码,谢谢啦分数不够另开贴给·!!!
myemail:[email protected]

解决方案 »

  1.   

    哦,也许我没有说清楚,不能使用超级终端
    要通过程序实现,是读写串口(com1口)
      

  2.   

    也考虑过自己编写串口收发的程序,但是这个系统对传输控制要求高,自己别写传输控制有点困难,时间上也不够:(
    所以打算采用ppp读写串口,类似于modem的通讯方式
      

  3.   

    关于PPP的RFC1661文档我以看过,但是感觉还是不好;
    最好有点实例
      

  4.   

    读写串口都不是问题
    我是想问关于ppp协议的编程方法!!
      

  5.   

    搂主所谓的无线通讯是不是:无线MODEM,他们之间通讯,完全可以拨号到公网,然后,文件传输,不行?
      

  6.   

    很困难的
    即使实现了ppp之后还后很多事情要做的
      

  7.   

    RAS拨号,从而可以得到拨号端以及服务端的IP,从而两者之间可以进行socket通讯。
    使用RAS拨号控制就是PPP协议方式
      

  8.   

    估计你要写驱动程序,你看能否写一个NDISWAN Miniport,这看上去挺适合的
      

  9.   

    一点看法:
    ppp是点到点的通讯协议,你的硬件(无线通讯模块)必须保证这一点,就是这个机器的串口发送的数据一定要传送到另外一个串口去,反之亦然。
    使用PPP通信,应该没有必要编程,你在一台机器上设置成拨号网络服务器,另一台设置成拨号网络客户端。接通后使用SOcket通信就可以了。
      

  10.   

    错了,拨号网络是建立在MODEM上的,SOrry
      

  11.   

    TCP/IP详解卷2的第5章,有SLIP接口的实现,但是源代码不完整我在VC下调试不过
    哪位朋友可以指教一二。
      

  12.   

    我做过串口方面的东东,我用的是activex组件只需写少量的代码就可以实现你想要的功能。而我们的无线通信是用单片机来实现的。我们只需对串口进行输入输出就能实现无线通信的功能。不知兄台准备用何种方法来实现。
      

  13.   

    你有500分吗?
    我正在做相关的项目,到可帮帮你!
    你有两个无线通讯模块,可用API函数或MSComm控件做。
    APi函数如下做接受:
    (初始化)int TeleCom::InitComm(int Comm_num, int baud)
    {
    /*
    if(NULL != m_hComm)
    CloseHandle(m_hComm);*/
    (接受数据)
    if (!WriteFile(m_hComm, lpBuf, dwToWrite, &dwWritten, &osWrite)) 
    {
    if (GetLastError() != ERROR_IO_PENDING) 

    // WriteFile failed, but it isn't delayed. Report error and abort.
    fRes = FALSE;
    //MessageBox("fail1");
    }
    else
    {
    // Write is pending.
    if (!GetOverlappedResult(m_hComm, &osWrite, &dwWritten, TRUE))
    {
    fRes = FALSE;
    //MessageBox("fail2");
    }
    else
    { // Write operation completed successfully.
    fRes = TRUE;
    }
    }
    }也可用VC内嵌的空间:
    (初始化)
    if(m_ctrlComm.GetPortOpen())
    m_ctrlComm.SetPortOpen(FALSE);

    //参数设置
    m_ctrlComm.SetCommPort(1); 
    //选择COM1
    m_ctrlComm.SetOutBufferSize(1024);
    //发送缓冲区
    m_ctrlComm.SetInputMode(1);
    //以二进制方式读写数据
    m_ctrlComm.SetSettings("19200,n,8,1");
    //波特率9600无检验位,8个数据位,1个停止位

    //打开端口
    if( !m_ctrlComm.GetPortOpen())
    m_ctrlComm.SetPortOpen(TRUE);//打开串口
    else
    AfxMessageBox("cannot open serial port");
    (发送)
    m_ctrlComm.SetOutput(COleVariant(charsend0));
      

  14.   

    PPP通讯需要IP地址,你准备怎么处理这个问题?而且PPP是数据链路层的协议,就是说,它下面还需要底层驱动程序,另外PPP有异步和同步模式,PPP很复杂的,我做过嵌入式系统里的PPP,程序量大概在5000,说实话 用VC我还不知道怎么实现呢.
      

  15.   

    偶一dx也曾经在嵌入式系统中实现了ppp,好像需要买协议支持……
      

  16.   

    我觉得 u2m(UpToMe) 说的不错 就是RAS编程 我手头就有一些资料
    关键是你得把其中之一配成拨号服务器 另一个拨上来以后为其分配ip 然后就是socket通信了
    我这就有一个联通内部的拨号服务器 号码就是130xxxxxxxx
      

  17.   

    我感觉RAS不能满足我的这个系统功能要求就没有Windows下的PPP编程原理和事例代码????
      

  18.   

    顺便说一下我有 3500分的可用分,500分小case啦~~~~~~~~~~~
      

  19.   

    如果是这样.我觉得是可以实现的.你将收到的数据(PPP数据)分析,PPP有个协商的过程.协商完后,就是IP数据通讯了!我这里有PPP的数据格式,供你参考一下!PPP一、 PPP的首部:
    PPP有四种格式的首部,分别用于不同的目的。
    1、 标准格式:
    PPP的标准格式为四个字节:
    ------------------------------------------------
    |      0        |    1     |     2         3     |   
    ------------------------------------------------
    |     Address   | Control |  Protocol          |
    ------------------------------------------------
    Address =0xff
    Control = 0x03
    Protocol=0xc021 / 0x8021 / 0xc223 / 0xc023 / 0x0021 / 0x002d / 0x002f / 0x8207
    其中Address和Control各占一个字节,Protocol占两个字节,该格式的PPP首部可用于LCP、NCP及认证的协商和传输IP包,压缩的TCP包及未压缩的TCP包,Protocol字段表示的含义见第二部分:PPP协议字段的取值。
    2、 使用PFC(Protocol Fields Compress)的格式:
    该格式是使用了协议字段压缩的格式,即把两个字节的协议字段压缩成一个字节,所以整个PPP首部只有三个字节:
    ------------------------------------------
    |      0        |    1     |     2       |
    ------------------------------------------
    |     Address   | Control |  Protocol   |
    ------------------------------------------
          0            1          2
    Address Control Protocol
    Address =0xff
    Control = 0x03
    Protocol=0x21 / 0x2d / 0x2f
    其中Address、Control和Protocol各占一个字节,该格式的PPP首部只用于传输IP包,压缩的TCP包及未压缩的TCP包。
    3、 使用ACFC(Address and Control Fields Compress)的格式:
    该格式是使用了地址和控制字段压缩的格式,只有协议字段的两个字节:
    ----------------------
    |   0         1      | 
    ----------------------
    |  Protocol          |
    ----------------------
    Protocol
    Protocol=0x0021 / 0x002d / 0x002f / 0x8021
    该格式的PPP首部可用于传输IP包,压缩的TCP包,未压缩的TCP包和NCP协商报文。
    4、 同时使用PFC和ACFC的格式:
    该格式是使用了协议字段压缩及地址和控制字段压缩的格式,只有一个字节:
    ----------------------
    |   0                | 
    ----------------------
    |  Protocol          |
    ----------------------
    Protocol=0x21 / 0x2d / 0x2f
    Protocol占一个字节,该格式的PPP首部分只用于传输IP包,压缩的TCP包及未压缩的TCP包。
    一般用第一种格式就行了.不过你用COM口,速度低,可以考虑用第二中格式,可以增加传输的数据比例.PPP协议看FRC文档资料就行了.里面很详细的!
      

  20.   

    谢谢:
    这些过程看看RFC应该清楚的了
    但是如果再Windows环境下编程,我总要通知操作系统掉用ppp的通讯方式吧?我有哪些可以使用的资源(例如:dll,函数)?
    windows下哪些机制可以控制ppp的传输,编程的时候如果不激活这种机制就算是ppp的报文都按照规范作了,不还是串口通讯吗?
      

  21.   

    www.cn1688.net www.cn1688.net www.cn1688.net www.cn1688.net www.cn1688.net www.cn1688.net www.cn1688.net www.cn1688.net www.cn1688.net www.cn1688.net www.cn1688.net www.cn1688.net www.cn1688.net www.cn1688.net www.cn1688.net www.cn1688.net www.cn1688.net www.cn1688.net www.cn1688.net
      

  22.   

    通过RAS,利用拨号网络相当于建立了一条通讯链路,拨通服务端后,自己为客户端,可以直接通过SOCKET与服务端建立连接(此时你应能Ping通服务端),进行通讯
      

  23.   

    TO 中国风:
    没有modem的情况下不能使用RAS吧?
      

  24.   

    我替你找了一下:
    A Remote Access Service (RAS) Client Class 
    http://www.vckbase.com/english/code/network/RasClient.shtml.htm
    其他还是vckbase
    (1)关于COM口:
    http://www.vckbase.com/code/listcode.asp?mclsid=9&sclsid=907
    上面的地址下很多!我自己用的是:多线程,多接收模式串口类LsComm;另外一个
    " Win32 API 串口控制 MFC 打包类 "和上面的一个意思!都是CSerial的打包类,前一个包的更多!
    (2)这是关于RAS的:
    http://www.vckbase.com/code/listcode.asp?mclsid=9&sclsid=913
      

  25.   

    A Remote Access Service (RAS) Client Class 
    http://www.vckbase.com/english/code/network/RasClient.shtml.htm
    的介绍:. The demo project, "RasDemo", sets up a PPP dial-up networking connection with a Dial-Up
    Server
      

  26.   

    to 小黑豆:
       十分感谢:)to crazyeagle(疯狂鹰) :
       兄弟你那里进展如何了?
      

  27.   

    to 小黑豆:
        不过ras对我的这个工程用处不大,我不需要拨号,也没有modem,我想直接进行ppp通讯
      

  28.   

    joners(疯狂坦克) :我也在查资料,我想在《tcp/ip技术详解》里找找。咱laogu.com里边。
      

  29.   

    两个工业模块不需要拨号?你意思是说不连接INTERNET而是两个模块之间对联而已是吗?PPP协议可以参考RFC1331、RFC1661、RFC1662还有一些其他的,一时记不得了,找找吧,很多地方能有下载,上面还有例子代码。
      

  30.   

    TO firmamenthy(执子之手):
    RFC我已经看过了,代码不完整,最重要的是现在不知道在WINDOWS下的实现机制
    具体工程的时候总归要环境的吧(VC6.0+WINDOWS)
      

  31.   

    我的项目要求是两台相距较远的计算机通过两个MODEM进行通讯!!
    我现在也正处在查资料当中!!!!
      

  32.   

    I think you should reference the HCI Layer in the bluetooth protocol stack.
      

  33.   

    你是想使用串口作为你的程序的最低层,只要发送到串口的数据对方就能够接收到,而在上层使用PPP协议,完成一个可靠的数据传送吗?
      

  34.   

    TO yinzhaohui() :
       你说的,没错!
       我要做的通讯是串口通讯,采用PPP是实现可靠的传输系统环境:
    1.无线通讯模块(硬件设备),接在PC机器串口上
    2.windows xp系统(两台)串口通讯
    两个无线通讯模块分别接在两台电脑上(串口),通讯只能在串口上进行,采用ppp(需要可靠的传输控制)通讯
      

  35.   

    如果是这样就可以直接实现了,你对PPP的通信过程如果了解了,那就没有什么问题
    ppp的通信过程大概是这样的
    1.首先(你不用完成PPP的所有的功能(如数据包(帧)的压缩,和很多安全认证方面的功能),明确了你要使用PPP的哪些功能了后,就可以开始编写了.
    编写
    1)你可以定义两个类1个完成串口的通讯2类完成PPP的协议,PPP类调用串口类进行数据传送,
    PPP的详细内容(RFC)
    我只说一说可靠的方法
    如果你要保证可靠你可以在串口类中进行,当然你的要求是PPP,那么你在串口类的传送中就可以只管传送不管出错没有(串口本生有奇偶效检,你可判断来要求对方重发)我使用的一种最简单的差错控制也旁随流量控制来完成可靠传送,但效率不高(占停方式)(前面的连接,认证完成后)1.你的应用程序要保证给PPP发送的数据是一个长度一般<MTU,那应用程序要分段发送数据,
    如果你想应用程序传给PPP的是任意长度,那么分段PPP类中实现,(分段的目的是不要使单个数大长)
    2.PPP对分段数据进行PPP头封装。(有效验字段)
    3.调用串口类进行发送,
    4.等待对方的响应
    5.如果10秒没有响应重发当前,如果重发3次放弃。
    6.如果对方有响应,(判断是确定响应还是重发响应)
    7.如果确定发送下一分段,返之重发当前段,3次放弃
    8.当该数据的所有分段都发送完后返回上层.
    注:接收方是通过发送方发送数据头的效验字段进行差错效验来判断是发确定响应还是重发响应的。由于串口的双工,通信也是双工.
      

  36.   

    看来要自己一点点的封装ppp的实现了,是这样的吧?
      

  37.   

    我想是的,windows好象没提供ppp程序或者dll吧.需要自己一点点的写了.
    我建议你把从串口收发数据不要做到PPP一起了,
    可以做两个线程,一个串口收发数据拼装成PPP的报文后再交给 PPP线程。
    整个工作量有点大哦。
      

  38.   

    是不是用短波电台传送文件啊,我做过一点。
    串口读写,用线程。
    不过做得不太好,有时会有误码。
    继续学习ing!