UDP

来源:互联网 发布:北京金税三期软件下载 编辑:程序博客网 时间:2024/06/01 09:32
UDP
服务器端(server):
1. 构造DatagramSocket实例,指定本地端口。
2. 通过DatagramSocket实例的receive方法接收DatagramPacket.DatagramPacket

中间就包含了通信的内容。
3. 通过DatagramSocket的send和receive方法来收和发DatagramPacket.
客户端(client):
1. 构造DatagramSocket实例。
2.通过DatagramSocket实例的send和receive方法发送DatagramPacket报文。

3.结束后,调用DatagramSocket的close方法关闭。


一个例子

public class AskServer {
    public static void main(String[] args) {
        //创建DatagramSocket,发送接收数据
        DatagramSocket socket=null;
        try {
            socket = new DatagramSocket(8888);
            Scanner input = new Scanner(System.in);
            while(true){
                //准备一个空的数据包,用来接收数据
                byte [] buf = new byte[1024];
                DatagramPacket packet = new

DatagramPacket(buf, buf.length);        
                //接收数据使用空的数据包
                socket.receive(packet);            

    
                //输出信息
                String info = new String

(packet.getData(), 0, packet.getLength());
                System.out.println("客户端请

求:"+info);
                //判断是否退出
                if("bye".equals(info)){
                    break;
                }
                //发送数据
                String result =input.nextLine();
                byte[] buf2= result.getBytes();
                DatagramPacket packet2 = new

DatagramPacket(buf2, buf2.length,
                        packet.getAddress(),

packet.getPort());
                socket.send(packet2);
            }            
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            //关闭socket
            socket.close();
        }
    }
}
/**
 * 在线客服客户
*/
public class AskClient {
    public static void main(String[] args) {
        //创建DatagramSocket,发送接收数据都依赖他
        DatagramSocket socket=null;
        try {
            socket = new DatagramSocket(9999);
            Scanner input = new Scanner(System.in);
            while(true){
                //准备要发送的数据
                String str =input.nextLine();//bye
                //使用数据包把数据封装起来
                byte[] buf =str.getBytes();
                DatagramPacket packet = new

DatagramPacket(buf, buf.length,
                        InetAddress.getByName

("192.168.1.252"), 8888);
                //发送数据包
                socket.send(packet);
                //判断是否退出
                if("bye".equals(str)){
                    break;
                }
                //接收数据
                byte [] buf2 = new byte[1024];
                DatagramPacket packet2 = new

DatagramPacket(buf2, buf2.length);
                socket.receive(packet2);
                System.out.println("服务器端反馈:"+
new String(packet2.getData(),0,packet2.getLength()));
            }            
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            //关闭socket
            socket.close();
        }        
    }
}