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 阅读(770) 评论(0)  编辑  收藏 所属分类: Java


只有注册用户登录后才能发表评论。


网站导航: