Re: [J2ME] Socket,重複送資料會得到錯誤
回一個跟程式沒啥關係的東西: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)
推
03/05 19:44, , 1F
03/05 19:44, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 5 篇):