我正在用java写一个ftp的服务器端,我现在处理abor这个命令发现了一点小问题:
有些ftp软件(cuteFTP)会直接发送ABOR给服务器端,某些ftp客户端软件(例如我用来测试的leapFTP)在发送abor给服务器端之前,总会先发送一些其它数据,这是我用ethereal抓到的一些会话的包:
   request: \377\364
   request:  \377\362
   request:  ABOR
那些\377\364 \377\362好像是与telnet协议有关的东西,我用socket接受的话必须利用socket.setOOBInline(true)打开紧急数据接受才能接收到,但是我接受到的东西是这个“駻BOR”,其16进制表示成"3f f2 41 42 4f 52",很容易看出
“41 42 4f 52”就是"ABOR"的asc码,但是前面的“3f f2”是什么东西呢?而且他们也不能转换城string类型,java中有没有什么方法可以去除掉那些东西只保留abor呢?
请求达人回答,高分悬赏!!

解决方案 »

  1.   

    很可能是编码问题,你的ftp服务器读取ftp客户端发来的数据要指定编码方式
    这要看ftp客户端是用什么编码方式发数据的。
    如果ftp客户端是用UTF-8发送的,你的ftp服务器也要按照指定UTF-8编码方式以流的形式读入数据。
    关键要看你的ftp客户端是用什么编码方式发数据的,你的ftp服务器也要按相同的编码读入。
    这样就可以了,我前几天遇到过这个问题的
      

  2.   

    Request: TYPE I
    Response: 200 Type set to I.
    Request: PORT 222,201,190,47,13,147
    Response: 200 PORT Command successful.
    Request: REST 56254464
    Response: 350 Restarting at 56254464. Send STORE or RETRIEVE.
    Request: RETR \277\313\302\241\325\275\312\277a.scm(注:克隆战士a.scm)
    Response: 150 Opening BINARY mode data connection for ........a.scm (261164289 Bytes).
    Request: \377\364
    Request: \377\362
    Request: ABOR
    Response: 426 Data connection closed, file transfer ........a.scm aborted by client.
    Response: 226 ABOR command successful.Request: QUIT221 Goodbye!
    Request: QUIT
    Response: 221 Goodbye!
      

  3.   

    如何指定编码格式啊?这个好像是OOB的数据嵌入了客户端命令当中,我不知道怎么去除这些信息
      

  4.   

    答:
    1)你说得没错,\377\364 \377\362就是telnet协议中规定的操作,我翻译一下(操作序列):
    'IAC' 'Interrupt Process' 'IAC' 'Data Mark'
    其中:(1)\364表示操作:'Interrupt Process',即实施telnet的The function IP。含义:ftp客户机告诉你这个FTP服务器,赶快放下你现在手头的事情,马上处理我的事件(我有紧急数据到来)。
       (2)\362表示操作:'Data Mark',这个字节是ftp客户机以TCP的紧急模式发送的一个字节。含义:即:其后的数据必须立即读取。
       (3)\377即IAC,是telnet中的转义字节(即:255),每一个telnet操作(如:\364、\362)都必须以IAC开始。
    2)很简单,这个序列是固定的即称为telnet的[IP,Synch]序列我没有看过你的程序,但通过理论分析,你应该收到的是“f2 41 42 4f 52”,因为f2是通过TCP紧急模式发送的一个字节而已。你只要将字节f2(即telnet操作:\362)丢弃即可以了。以上仅供你参考
      

  5.   

    我只记得telnet中从236(EOF)~255(IAC)具体含义,\377\364 \377\362不知道,
    学习了
      

  6.   

    答:也是以前分析过这些玩艺儿。那些RFC的具体编号已记不清了。
      

  7.   

    答:“駻BOR”中的第一个字节正是“f2”,我理论分析的正是这样,你只收到了5个字节,即:f2 41 42 4f 52而不是你贴子中的6个:3f f2 41 42 4f 52。因此:你把这个串变成字节中,并删除掉第一个字节,就行了。