高分!!java中的字符编码问题

zhang_nec 2008-04-27 12:22:35
我正在用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呢?
请求达人回答,高分悬赏!!
...全文
144 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hmsuccess 2008-04-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jiangnaisong 的回复:]
引用楼主 zhang_nec 的帖子:
我正在用java写一个ftp的服务器端,我现在处理abor这个命令发现了一点小问题:
有些ftp软件(cuteFTP)会直接发送ABOR给服务器端,某些ftp客户端软件(例如我用来测试的leapFTP)在发送abor给服务器端之前,总会先发送一些其它数据,这是我用ethereal抓到的一些会话的包:
request: \377\364
request: \377\362
request: ABOR
那些\377\364 \377\362好像是与telnet协议有…
[/Quote]
我只记得telnet中从236(EOF)~255(IAC)具体含义,\377\364 \377\362不知道,
学习了
zhang_nec 2008-04-27
  • 打赏
  • 举报
回复
有高手能给回答一下吗?
云上飞翔 2008-04-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhang_nec 的帖子:]
我正在用java写一个ftp的服务器端,我现在处理abor这个命令发现了一点小问题:
有些ftp软件(cuteFTP)会直接发送ABOR给服务器端,某些ftp客户端软件(例如我用来测试的leapFTP)在发送abor给服务器端之前,总会先发送一些其它数据,这是我用ethereal抓到的一些会话的包:
request: \377\364
request: \377\362
request: ABOR
那些\377\364 \377\362好像是与telnet协议有关的东西,我用socket接受的话必须…
[/Quote]
答:
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)丢弃即可以了。

以上仅供你参考
zhang_nec 2008-04-27
  • 打赏
  • 举报
回复
如何指定编码格式啊?这个好像是OOB的数据嵌入了客户端命令当中,我不知道怎么去除这些信息
zhang_nec 2008-04-27
  • 打赏
  • 举报
回复
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!
KKK2007 2008-04-27
  • 打赏
  • 举报
回复
很可能是编码问题,你的ftp服务器读取ftp客户端发来的数据要指定编码方式
这要看ftp客户端是用什么编码方式发数据的。
如果ftp客户端是用UTF-8发送的,你的ftp服务器也要按照指定UTF-8编码方式以流的形式读入数据。
关键要看你的ftp客户端是用什么编码方式发数据的,你的ftp服务器也要按相同的编码读入。
这样就可以了,我前几天遇到过这个问题的
Shine_Panda 2008-04-27
  • 打赏
  • 举报
回复
先转为 16进制 去掉后
再转回去.
diandianzhu_1985 2008-04-27
  • 打赏
  • 举报
回复
做通讯报文都有一定格式的,你可以去搜索一下这个报文的表现方式!
hmsuccess 2008-04-27
  • 打赏
  • 举报
回复
3f f2 ,这是协议分析里的东西,好久不看了,你把你的捕获包给我看一下
  • 打赏
  • 举报
回复
学习。。。
云上飞翔 2008-04-27
  • 打赏
  • 举报
回复
答:“駻BOR”中的第一个字节正是“f2”,我理论分析的正是这样,你只收到了5个字节,即:f2 41 42 4f 52而不是你贴子中的6个:3f f2 41 42 4f 52。因此:你把这个串变成字节中,并删除掉第一个字节,就行了。
zhang_nec 2008-04-27
  • 打赏
  • 举报
回复
急啊!如何处理客户端的这种回复啊!!
云上飞翔 2008-04-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hmsuccess 的回复:]
引用 9 楼 jiangnaisong 的回复:
引用楼主 zhang_nec 的帖子:
我正在用java写一个ftp的服务器端,我现在处理abor这个命令发现了一点小问题:
有些ftp软件(cuteFTP)会直接发送ABOR给服务器端,某些ftp客户端软件(例如我用来测试的leapFTP)在发送abor给服务器端之前,总会先发送一些其它数据,这是我用ethereal抓到的一些会话的包:
request: \377\364
request: \377\362
request: ABOR
那…
[/Quote]
答:也是以前分析过这些玩艺儿。那些RFC的具体编号已记不清了。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧