作者mc18 (无道德事业集团)
看板java
标题Re: [J2ME] Socket,重复送资料会得到错误
时间Tue Nov 18 08:19:31 2008
回一个跟程式没啥关系的东西:p
在写这类程式时建议可以用wireshark做辅助,
帮助你分析每一个你送出及收到的封包到底长什麽样子.
不过我相信很多人都没有很艰深的网路底子(包含我), 所以wireshark打开开始listen时,
看到一大堆无关的封包应该就被吓傻然後关掉了.
我的做法是, 如果很单纯的是单点对单点的传输, 例如你的target是10.0.0.2:1234
你可以在filter里面下:
tcp.port == 1234 或是
ip.src == 10.0.0.2 || ip.desc == 10.0.0.2
(前面说过了, 我不是transport layer以下的专家, 其他表达式我也不太会用, 这是我
这种网路新手在用的表达式, 有更好的欢迎指正:p)
这样之後基本上你只会看到你跟target之间沟通的封包了, 之後你需要care的只有
payload的部分, TCP or IP header基本上不是我们需要去实作的, 不过要分清楚的是
UDP是叫datagram就是了.
最後补充一点的是如果您实作的是现有的protocal, 例如SSH, 如果您的封包里面的
payload格式压错了, 你在wireshark里也可以看到他会提示你[malformed]的字样,告诉你
这个封包大概除了你之外没有人看得懂它是什麽:p
以上, 希望对常实作socket程式的人有帮助.
※ 引述《ixxogux (坚持阿伏哥连盟 )》之铭言:
: 我来了,一如我之前所承诺的 :)
: : sc.setSocketOption(SocketConnection.DELAY, 0);
: : sc.setSocketOption(SocketConnection.KEEPALIVE, 0);
: : //参考自http://developers.sun.com/mobility/midp/articles/midp2network/
: setSocketOption(SocketConnection.DELAY,0);//传送"没有"delay之意
: //也就是no buffer!
: setSocketOption(SocketConnection.KEEPALIVE,0);//如字意,表示
: //"不要"持续连线
: 跟各位报告一下,这份程式已经证实没有问题。有问题的是对方的server :p
: 问题出在哪呢?
: 对方只要接受连线,直到我传了结束关键字,该server就会把socket connection
: 给关掉,也就导致我後面要送第二次的时候出了点小问题噜。
: 结论:写法没错,有需要的人可以参考,或者是写信问我喔。
: 至於前面所提到的
: ReceiveMessages()
: 里面有个int ch = 100;//这个没啥特殊意义,写0 写10好。反正接下来
: // ch = is.read(); 就会把他盖掉了
: 此外,我自己的习惯会是method首字大写。感谢PsMonkey不厌其烦的指正。
: 也就是:Java 的method习惯是首字小写。
: 谢谢各位的帮忙
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.193.81.34
※ 编辑: mc18 来自: 123.193.81.34 (11/18 08:28)
1F:推 ixxogux:现在看到这篇回文,感谢您的用心 03/05 19:44