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发送时,就仍然往这个地址和端口发送数据,因此可以发送成功。
*/