udp server client

package testUDP;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPServer

{

    public static final int PORT = 30000;

    // 定义每个数据报的最大大小为4K

    private static final int DATA_LEN = 4096;

    // 定义该服务器使用的DatagramSocket

    private DatagramSocket socket = null;

    // 定义接收网络数据的字节数组

    byte[] inBuff = new byte[DATA_LEN];

    // 以指定字节数组创建准备接受数据的DatagramPacket对象

    private DatagramPacket inPacket =

    new DatagramPacket(inBuff, inBuff.length);

    // 定义一个用于发送的DatagramPacket对象

    private DatagramPacket outPacket;

    // 定义一个字符串数组,服务器发送该数组的的元素

    String[] books = new String[]

    {

    "轻量级J2EE企业应用实战",

    "基于J2EE的Ajax宝典",

    "Struts2权威指南",

    "ROR敏捷开发最佳实践"

    };

    public void init() throws IOException

    {

        try

        {

            // 创建DatagramSocket对象

            socket = new DatagramSocket(PORT);

            // 采用循环接受数据

            for (int i = 0; i < 1000; i++)

            {

                // 读取Socket中的数据,读到的数据放在inPacket所封装的字节数组里。

                socket.receive(inPacket);

                // 判断inPacket.getData()和inBuff是否是同一个数组

                System.out.println(inBuff == inPacket.getData());

                // 将接收到的内容转成字符串后输出

                System.out.println(new String(inBuff,

                0, inPacket.getLength()));

                // 从字符串数组中取出一个元素作为发送的数据

                byte[] sendData = books[i % 4].getBytes();

                // 以指定字节数组作为发送数据、以刚接受到的DatagramPacket的

                // 源SocketAddress作为目标SocketAddress创建DatagramPacket.

                outPacket = new DatagramPacket(sendData,

                sendData.length, inPacket.getSocketAddress());

                // 发送数据

                socket.send(outPacket);

            }

        }

        // 使用finally块保证关闭资源

        finally

        {

            if (socket != null)

            {

                socket.close();

            }

        }

    }

    public static void main(String[] args)

    throws IOException

    {

        new UDPServer().init();

    }

}

 

 

package testUDP;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class UDPClient  
{  
    // 定义发送数据报的目的地  
    public static final int DEST_PORT = 30000;  
    public static final String DEST_IP = "127.0.0.1";  
    // 定义每个数据报的最大大小为4KB  
    private static final int DATA_LEN = 4*4096;     
    // 定义接收网络数据的字节数组  
    byte[] inBuff = new byte[DATA_LEN];  
    // 以指定的字节数组创建准备接收数据的DatagramPacket对象  
    private DatagramPacket inPacket =   
        new DatagramPacket(inBuff , inBuff.length);  
    // 定义一个用于发送的DatagramPacket对象  
    private DatagramPacket outPacket = null;  
    public void init()throws IOException  
    {  
        try(  
            // 创建一个客户端DatagramSocket,使用随机端口  
            DatagramSocket socket = new DatagramSocket())  
        {  
            // 初始化发送用的DatagramSocket,它包含一个长度为0的字节数组  
            outPacket = new DatagramPacket(new byte[0] , 0  
                , InetAddress.getByName(DEST_IP) , DEST_PORT);  
            // 创建键盘输入流  
            Scanner scan = new Scanner(System.in);  
            // 不断地读取键盘输入  
            while(scan.hasNextLine())  
            {  
                // 将键盘输入的一行字符串转换成字节数组  
                byte[] buff = scan.nextLine().getBytes();  
                // 设置发送用的DatagramPacket中的字节数据  
                outPacket.setData(buff);  
                // 发送数据报  
                socket.send(outPacket);  
                // 读取Socket中的数据,读到的数据放在inPacket所封装的字节数组中  
                socket.receive(inPacket);  
                System.out.println(new String(inBuff , 0  
                    , inPacket.getLength()));  
            }  
        }  
    }  
    public static void main(String[] args)   
        throws IOException  
    {  
        new UDPClient().init();  
    }  
}  

  

posted @ 2015-07-13 17:43  Bigben  阅读(201)  评论(0编辑  收藏  举报