- 不管是那個語言, 底層都是同樣的實作, 所以用法大同小異, 抓到 socket 的本質, 在換用不同語言時, 自然會知道要怎麼查相關的操作。Python 官網的 socket HOWTO 講得滿清楚的。
- 為了方便開發, server socket 記得設 SO_REUSEADDR, 以避免 "address already in use" 的錯誤訊息。詳情見: What is the meaning of SO_REUSEADDR (setsockopt option) - Linux?
- 寫入資料到 socket 時, OS 為了減少 system call, 會有 write buffer。記得查一下自動或手動 flush 的機制, 確保資料有即時送出。這方面 java 最簡單, 不用查也猜得到就是包成 PrintWriter, 用 flush() 即可。雖然 java IO 有點囉唆, 提供一致抽象介面也是有好處啦。
- 接受端要知道如何收到完整的資料。有各種方式可用: 像是先傳 byte 數, 總是傳固定數量 bytes 過去等 (不夠補 0)。我選擇用 '\n' 做為結束字元, 並將傳輸資料中的 '\n' 先換成別的字元 (如 '\u0001') 再傳過去。好處是可以輸出到 console 或 log 檔, 每次訊息都占一行, 方便除錯。
- serialization 的選擇需另開文章討論細項。整體來說, 轉成 JSON 再輸出是滿好的選擇。
2011年6月13日 星期一
socket 超基本心得
最近用 perl、python、java 各寫了 socket 的小程式, 簡記一下心得:
訂閱:
張貼留言 (Atom)
在 Fedora 下裝 id-utils
Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...
-
find -uid 可以找目錄下特定使用者有的檔案, 反過來不知怎麼找。 今天靈機一動, 想到可以這麼搞, 不夠直接, 至少能用就是了: ls -lR DIR | grep "^[-rw]\{10\} " | grep -v USER 2011-01-...
-
Captive Portal 是指在可以正常用網路前, 先導到一個登入網頁, 登入後才可以正常上網。通常用在需要付費上網的地方, 或是飯店提供免費但需帳號登入的 Wi-Fi。不過不限於 Wi-Fi 連線 這樣作的好處是使用者可以透過網頁看到比較詳細的說明, 像是「使用者同意書...
-
在討論 HTTPS Proxy 前, 要先分清楚是在講那件事: Proxy 和 client 之間的連線用 HTTPS Proxy 允許 client 透過它往外用 HTTPS 連線 前者的好處是保護 client 和 Proxy 之間的連線, client 若是用 ...
沒有留言:
張貼留言