Socket Programming Considerations (1)

          Posted on 2010-07-26 09:31 天快黑了 閱讀(1829) 評論(1)  編輯  收藏 所屬分類: Socket
          第一次開博,第一次寫文章。文筆不好,只是記錄一下個人心得。

          最近一直在做Socket程序,這里把一些Socket程序的注意事項總結一下。今天先說說Socket中的Timeout,其它的下次補全。


          1.       Socket Timeout

          Socket程序的時候需要注意設置下面的timeout,避免對方沒有響應的時候,導致Socket程序掛起或等待時間過長

          1.1         Accept Timeout

          Accept timeout 僅對ServerSocket有用。ServerSocket 使用accept()方法來監聽客戶端Socket的連接。

          默認,ServerSocket.accept() 方法會一直阻塞直到有客戶端來連接。通常,我們不需要設置accept timeout.

          但有時候特殊情況,還是要考慮設置accept timeout.

          比如: 程序A給程序B發了一個JMS消息,然后程序A啟動一個Socket Server,想通過socket等待接收程序B的返回消息。如果不設置accept timeout, 并且程序B因為某些原因一直不能連接Socket Server,最終會導致程序A掛起。

          Accept Timeout可以這樣設置:

          ServerSocket serverSocket = new ServerSocket(5555);

          serverSocket.setSoTimeout(5000); // in milliseconds

          while (true) {

              Socket socket = serverSocket.accept();

                  …

          }

          1.2         Connect Timeout

          Client端連接Server端的時候,可以指定Connect Timeout

          如果沒有指定,會使用操作系統的默認值:

          OS

          Default TCP timeout

          BSD

          75 seconds

          Linux

          189 seconds

          Solaris

          225 seconds

          Windows XP

          21 seconds

          Connect Timeout可以這樣設置:

          SocketAddress socketAddress = new InetSocketAddress(host, port);

          socket = new Socket();

          socket.connect(socketAddress, connectTimeout);

          1.3         Receive Timeout

          socket從另一方接收數據時,可以設置Receive Timeout

          默認沒有timeout,socket會一直阻塞直到有數據可讀取。

          Receive Timeout可以這樣設置:

          Socket socket = new Socket(host, port);

          socket.setSoTimeout(timeout);

          1.4         Send Timeout

          Send Timeoutsocket給另一方發送數據時使用的。

          不過Java里沒有辦法設置Send Timeout.

          當然,socket發送數據的時候,會首先發送到本機OS的一個buffer內。一般只要一次發送的數據不是很大,即使對方掛起或暫時不能接收數據,也不會導致發送方掛起。


          Feedback

          # re: Socket Programming Considerations (1)  回復  更多評論   

          2010-07-27 10:49 by heqs
          不錯,寫的很詳細。。。期待你的下一章。。。

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          posts - 5, comments - 25, trackbacks - 0, articles - 1

          Copyright © 天快黑了

          主站蜘蛛池模板: 广宁县| 科尔| 白山市| 祁门县| 福鼎市| 江永县| 象山县| 邵阳县| 井陉县| 望奎县| 郧西县| 宾川县| 礼泉县| 普兰县| 景泰县| 闽清县| 平南县| 大邑县| 荣成市| 夏津县| 肇州县| 金坛市| 缙云县| 安国市| 威远县| 景德镇市| 梅河口市| 环江| 桂东县| 屏边| 团风县| 裕民县| 亳州市| 湾仔区| 宿迁市| 虹口区| 德州市| 肇庆市| 兴安县| 临沧市| 蒙山县|