环境:1个小路由器,1个电脑的IE浏览器
  状态:用浏览器连接192.168.0.1 到路由器上,看到路由器的web 配置界面(此界面是我编写的,开发用)。路由器上有http协议。  问题:如何通过这个web界面上传2进制文件到,路由器?
   web 的html代码如下:<tbody>
    <TR>
       <TD class=option_td style="TEXT-ALIGN: left" width="30%">Select file
       <INPUT class=browseinput type=file name=System <INPUT class=buttoninput type=submit value="Update" name=WebUpdatename></TD>
    </TR>
</tbody
我有几个不明白的地方:
   1、通过浏览器的web界面(客户端)选择上传文件:F:\777.txt  ,然后点击update(上传按键),此时这个浏览器会以什么形式向我的路由器(服务器)发送777.txt数据?---Socket?http的tcp方式?
   2、这个发送的过程是浏览器自动上传?还是由我的html里边写PHP程序来上传的?   我的理解是:在web界面里写相应的PHP上传程序,选择文件并按上传按键(update),然后web就通过socket向路由器发送数据包,路由器端监听到响应后,接收数据。
   请大家帮忙分析一下,多谢各位!!

解决方案 »

  1.   

      
      路由器页面开发:   就是你用html写几个简单的网页,存到路由器的Flash上,然后通过访问路由器的ip,路由器里的程序会把前编写的网页的html程序发出来给浏览器,这时候你就看到了配置界面。
      

  2.   

    了解一下 HTTP 协议的上传数据部分就你明白了. 只需要发送 Multi-Part Content 数据就行了.一般二进制数据可以按 base64 的格式上传..
      

  3.   

    POST上传时,不管理是不是二进制,均base64 编码后上传
      

  4.   


    感谢楼上各位,
     3楼说:"只需要发送 Multi-Part Content 数据就行了. "。 请问 :这句话是不是这样理解---上传100M的文件 和发1K的文件 ,都是发送同样格式的、相同大小的只是内容不同的一个数据包??Multi-Part Content :是什么内容,我在去搜索了解一下。

      还想多问几个问题
        1:通过浏览器 点击上传按键以后,上传的工作是由浏览器自己完成的????不需要我写代码来实现吧?     2:假如文件比较大--100M,点击上传后,是不是浏览器自动去多次往 action指定的地址上传??(action="http://192.168.0.2:10080/">)  假如多次上传的话,我的服务器端应该通过socket多次接收到消息,但是我就接受到了一次消息,通过网络抓包也就发现了一次http协议的 从客户端到服务器端的发包。      有截图,但是不知道怎么发到里边来。
       大致如下:
    Frame 925(686 bytes on write,686 bytes capured)
    Ethernet II ,Src:
    Internet prtocol,src:192.168.0.104,Dst 192.168.0.50
    Transmission Control Protocol,src Port:ott
    Hypertext Transter protocol
    POST /192.168.0.2:10080 HTTP/1.1\r\n
    Accept: image/git
    Referer:
    Accept language:zh-cn\r\n
    Content-Type:
    Accept-Encoding:gzip,deflate\r\n
    user-agent: mozilla/4.0
    Host: 192.168.0.50\r\n
    Content-length:46------------------这个指什么长度?????connection:keep_Alive\r\n
    catch-control_no catch
    authorization:basic YWRtaw46YWRaw4=\r\n
      Credentials:admin
    Line-base text data:application/x-www-form-urlencoded
      System=F%3A%5cexample.txt&Webupdataname=update
         
    这以上部分是算发送的数据包的包头么?那发数据是应该什么时候发?在下一个数据包么》?
    还是每次点击完上传后,就仅仅发送这么一个数据包?文件内容就不发送了?
      麻烦各位继续指点迷津!! 多谢
      

  5.   

    1 如果你能过浏览器传. 这一切工作都是浏览器来完成的.
    2 如果上传大文件. 服务器一般会发送 HTTP 100 的头回应客户端.也就是说.你的HTTP数据包还是  130M 多些. HTTP头+HTTP 数据(包含 130M 左右的 上传文件 base64 数据),  上传的时候.  socket 这一层面暂时不讲. tcp/ip 自动会分包发送的. 单 HTTP 这一层面. 发送一定量的数据后,服务器会返回 HTTP 100 的头. 然后这个头里会返回接收的数据位置.  你下次再 完成剩下的数据发送. 服务器再返回 HTTP 100, 如些反复....直到服务器返回 HTTP 200 成功的头.具体过程. 你抓取一个大文件上传的HTTP数据包,然后分析就明白了.关于 Multipart Content 请参阅  RFC2387 文档.
    http://www.faqs.org/rfcs/rfc2387.html
      

  6.   

    我想通过网页上传2进制文件到板子里,我发现我的提交表单的 html文件写的有问题,不能实现上传如下:
    <form method="POST" enctype="multipart/form-data" action="192.168.0.50/net">
    <div id="label"><font class="font2">Web Update</font></div>
    <div id="OptionDiv" align="center">
    <table cellpadding="1" cellspacing="1" class="option" width="100%">
    <tr>
       <td  class="option_td" width="30%" style="text-align:center">Select file 
       <input type=file size="20" name="System" value="Put Filename Here" class="browseinput">(*.z,*.txt,*.au)<INPUT TYPE=SUBMIT VALUE="Update" name="WebUpdate" class="buttoninput"></td>
    </tr></table>
    </div>
    </form>  enctype="multipart/form-data"  --->这个东西刚开始没写,点击上传后,抓包发现没有上传数据。  现在加了这句话,抓包能抓到浏览器上传数据的部分了, 但是问题同时出来了,不加enctype="multipart/form-data"之前,点击上传之后没有上传数据,板子没死机;但是自从加上enctype="multipart/form-data"这句话后,能通过抓包发现,浏览器已经上传了文件,但是板子立马就死机了,没征兆,是不是因为板子不能解析发过来的东西??  

      我仅仅需要上传二进制文件,那么enctype="" 属性应该等于什么呢?》??
      

  7.   

    问题解决了体会:
     上传时 一定要写<form method="POST" enctype="multipart/form-data" action="">  不写的话 浏览器不往板子里传数据。  接收时,要找到分隔符的头和尾 就能分出上传的数据的内容了。
      要多抓包来尝试。 
      

  8.   

    是的.如果你一开始就把 <form 部分贴出来,或者把你上传的数据包抓出来,按HTTP协议,很容易就找出问题所在了....