so true

          心懷未來,開創未來!
          隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
          數據加載中……

          UDP通信的一個小例子!

          package com.bacoo.www;

          import java.io.IOException;
          import java.net.*;

          public class UDPServer implements Runnable{

           /**
            * @param args
            */
           
           public UDPServer(){
            new Thread(this).start();
            try{
             DatagramSocket dgs=new DatagramSocket(8765);
             byte [] buf=new byte[1024];
             DatagramPacket dgp=new DatagramPacket(buf,buf.length);
             
             for(int i=0;i<3;i++){
              dgs.receive(dgp);
              System.out.println("The server has received the datagram!");
              dgs.send(dgp);
             }
            }catch(IOException ioe){
             ioe.printStackTrace();
            }
           }
           public static void main(String[] args) {
            // TODO Auto-generated method stub
            new UDPServer();
           }

           public void run() {
            // TODO Auto-generated method stub
            new UDPClient();
           }

          }
          /*
          說明:
          這里要對UDP方式作一個簡要的說明,構成UDP通信機制的主要是兩個類,即DatagramSocket和DatagramPacket,
          主要包括發送和接收兩個方面的內容,對于發送方來說,需要:
          (1)建立一個DatagramSocket對象,注意建立的時候不需要指定端口,因為發送方關注的是發送成功,而不在乎是從本機的哪個端口發送出去的,
          而發送的具體事宜則是由DatagramPacket來完成的,包括對目的地址的指定。
          (2)建立一個DatagramPacket對象,注意要制定目的地址和對應的端口A。
          (3)調用DatagramSocket對象的send函數發送,send函數的參數就是剛建立的DatagramPacket對象。
          對于接收方來講,需要:
          (1)建立一個DatagramSocket對象,注意要指定端口,因為作為接收方,不在乎接收的東西是從哪里來的,而只是在本機的一個指定端口進行
          接收就ok了,但需要注意這里的端口要與發送方投遞的端口A一致。
          (2)建立一個DatagramPacket對象,注意不必指定地址和端口,因為這是被動的接收,而在接收過程中,該DatagramPacket對象
          扮演的角色僅僅是一個信息的承載者,也就是把從端口來的信息封存到它里面。
          (3)調用DatagramSocket對象的receive函數接收,receive函數的參數就是剛建立的DatagramPacket對象。

          最后,還有一點需要說明,就是在剛剛指出的接受模式來說,比如說本例中,雖然未給DatagramPacket對象指定地址和端口,但是
          依然可以調用send函數進行發送,這是為什么呢?因為它先調用了receive函數,通過調用該函數,可以在接收過程中保存了信息的來源,
          也就是地址和端口,因此下次再用send發送時,就仍然往這個地址和端口發送數據,因此可以發送成功。
          */

          posted on 2007-12-28 21:12 so true 閱讀(786) 評論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 诸暨市| 宁武县| 福鼎市| 泾阳县| 大化| 台江县| 如东县| 安岳县| 珲春市| 龙川县| 黄陵县| 连南| 大宁县| 偏关县| 瓦房店市| 崇明县| 临猗县| 泾源县| 玉门市| 炉霍县| 荥阳市| 恩施市| 伊金霍洛旗| 莱西市| 沙河市| 怀集县| 南京市| 酉阳| 定远县| 柏乡县| 石城县| 灯塔市| 大足县| 门头沟区| 鹿邑县| 娄底市| 洛川县| 巨鹿县| 耿马| 平定县| 安国市|