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 閱讀(780) 評論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 黑水县| 遂宁市| 延津县| 册亨县| 通许县| 喜德县| 水城县| 天峻县| 石柱| 喀喇沁旗| 汶川县| 嘉峪关市| 碌曲县| 龙陵县| 长垣县| 万荣县| 攀枝花市| 铜陵市| 德庆县| 台前县| 嘉义县| 通榆县| 江孜县| 潞城市| 当阳市| 大邑县| 页游| 砀山县| 邹城市| 中西区| 扎鲁特旗| 温州市| 梅州市| 镇平县| 盐亭县| 会同县| 龙泉市| 孟连| 灵台县| 八宿县| 宣恩县|