java学习笔记 UDP协议

TCP的所有操作都建立在可靠的链接

UDP(数据报协议)发送的消息对方并不一定会接收到,所有的信息都是以数据报的形式发出

使用DatagramSocket类和DatagramPacket类完成操作

服务端UDP:

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

//定义服务端接收信息
public class TestUdpServer {
    public static void main(String[] args) {
        try {
            DatagramSocket ds = new DatagramSocket(9000);//设定监听端口号
            byte bytes[] = new byte[1024];//1KB
            DatagramPacket dp = new DatagramPacket(bytes,bytes.length);//DatagramPacket(byte[] buf, int length)构造方法
            //设定循环接收
            String str = null;
            while (true) {
                ds.receive(dp);//阻塞式方法,一直到接收到数据才解锁
                System.out.println("接收数据 : ");
                str = new String(bytes,0,dp.getLength());    //注意receive之后,dp填充的是bytes数组
                System.out.println(str + ": "+ dp.getAddress().getHostName() + "-----" + dp.getSocketAddress());
            }
        }catch(SocketException e1) {
            e1.printStackTrace();    
        }catch(IOException e2) {
            e2.printStackTrace();    
        }
    }    
}

客户端UDP:

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

//定义客户端发送信息
public class TestUdpClient {
    public static void main(String[] args) {
        try {
            DatagramSocket ds = new DatagramSocket(8888);//设定监听端口
            String str = "Hello Word!";
            byte bytes[] = str.getBytes();
            //DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)
            //InetSocketAddress(InetAddress addr, int port)
            DatagramPacket dp = new DatagramPacket(bytes,0,bytes.length,new InetSocketAddress("192.168.0.121",9000));
            ds.send(dp);
            ds.close();
        }catch(SocketException e) {
            e.printStackTrace();    
        }catch(IOException e2) {
            e2.printStackTrace();    
        }
    }    
}

结果:

r1

posted @ 2016-09-01 13:39  鱼虎纹鲨鱼  阅读(169)  评论(0编辑  收藏  举报