首页 > 代码库 > java网络之udp

java网络之udp

 

import java.net.*;/** * InetAddress用法 * 获取本地主机名,ip * 通过主机名,ip获取InetAddress对象 */public class Demo{    public static void main(String[] args) throws Exception {        InetAddress localHost = InetAddress.getLocalHost();        System.out.println(localHost.toString());        System.out.println(localHost.getHostAddress());        System.out.println(localHost.getHostName());                InetAddress thinkpad = InetAddress.getByName("reborn-PC");        System.out.println(thinkpad.toString());    }}

 

import java.net.*;/** * 简单udp发送接收 */class UdpSend {    public static void main(String[] args) throws Exception {        // 1,创建udp服务。通过DatagramSocket对象。DatagramSocket(int port)可以绑定本地端口        DatagramSocket ds = new DatagramSocket();        // 2,确定数据,并封装成数据包。DatagramPacket(byte[] buf, int length, InetAddress        // address, int port)        byte[] buf = "udp ge men lai le ".getBytes();        DatagramPacket dp = new DatagramPacket(buf, buf.length,                InetAddress.getByName("127.0.0.1"), 10000);        // 3,通过socket服务,将已有的数据包发送出去。通过send方法。        ds.send(dp);        // 4,关闭资源。        ds.close();    }}

 

class UdpRece {    public static void main(String[] args) throws Exception {        // 1,创建udp socket,建立端点。        DatagramSocket ds = new DatagramSocket(10000);        while (true) {            // 2,定义数据包。用于存储数据。            byte[] buf = new byte[1024];            DatagramPacket dp = new DatagramPacket(buf, buf.length);            // 3,通过服务的receive方法将收到数据存入数据包中。            ds.receive(dp);// 阻塞式方法。            // 4,通过数据包的方法获取其中的数据。  获取发送端端口            String ip = dp.getAddress().getHostAddress();            String data = new String(dp.getData(), 0, dp.getLength());            int port = dp.getPort();            System.out.println(ip + "::" + data + "::" + port);        }        // 5,关闭资源        // ds.close();    }}
/*udp多线程实现编写一个聊天程序。有收数据的部分,和发数据的部分。这两部分需要同时执行。那就需要用到多线程技术。一个线程控制收,一个线程控制发。因为收和发动作是不一致的,所以要定义两个run方法。而且这两个方法要封装到不同的类中。*/import java.io.*;import java.net.*;class Send implements Runnable{    private DatagramSocket ds;    public Send(DatagramSocket ds)    {        this.ds = ds;    }    public void run()    {        try        {            BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));            String line = null;            while((line=bufr.readLine())!=null)            {                                byte[] buf = line.getBytes();                DatagramPacket dp =                     new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10002);                ds.send(dp);                if("886".equals(line))                    break;            }        }        catch (Exception e)        {            throw new RuntimeException("发送端失败");        }    }}class Rece implements Runnable{    private DatagramSocket ds;    public Rece(DatagramSocket ds)    {        this.ds = ds;    }    public void run()    {        try        {            while(true)            {                byte[] buf = new byte[1024];                DatagramPacket dp = new DatagramPacket(buf,buf.length);                ds.receive(dp);                String ip = dp.getAddress().getHostAddress();                String data = new String(dp.getData(),0,dp.getLength());                if("886".equals(data))                {                    System.out.println(ip+"....离开聊天室");                    break;                }                System.out.println(ip+":"+data);            }        }        catch (Exception e)        {            throw new RuntimeException("接收端失败");        }    }}class  ChatDemo{    public static void main(String[] args) throws Exception    {        DatagramSocket sendSocket = new DatagramSocket();        DatagramSocket receSocket = new DatagramSocket(10002);        new Thread(new Send(sendSocket)).start();        new Thread(new Rece(receSocket)).start();    }}

 

java网络之udp