udp编程

来源:互联网 发布:shadownsocks ubuntu 编辑:程序博客网 时间:2024/05/21 05:20

package com.phone.week5.day5;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class AskClient {

public static void main(String[] args) {    try {        //1.准备要发送的数据,以及发送主机的IP地址和端口号        String mess = "您好,在吗?我想咨询一个问题";        byte[] b =mess.getBytes();        //得一指定主机的IP地址的对象        InetAddress ia = InetAddress.getByName("localhost");        int port = 7788;        //2.创建一个发送数据的数据包        DatagramPacket dp = new DatagramPacket(b, b.length, ia, port);        //3.创建一个发送数据包的套接字对象        DatagramSocket ds = new DatagramSocket();        //4.发送数据包        ds.send(dp);        //接收服务器端的响应        byte[] by = new byte[1024];        //创建一个接收包        DatagramPacket dp2 = new DatagramPacket(by, by.length);        //开始接收响应        ds.receive(dp2);        String reply = new String(dp2.getData(), 0, dp2.getLength());        System.out.println("服务器端说:"+reply);        //5.释放资源        ds.close();    } catch (UnknownHostException e) {        e.printStackTrace();    } catch (SocketException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }}

}

package com.phone.week5.day5;

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

public class AskServer {

public static void main(String[] args) {    try {        //1.创建一个接收数据包的套接字对象并绑定一个指定的端口        DatagramSocket ds = new DatagramSocket(7788);        //2.创建一个接收数据的字节数组        byte b[] = new byte[1024];        //3.创建一个接收数据的数据包        DatagramPacket dp = new DatagramPacket(b, b.length);        //4.开始接收数据        ds.receive(dp);        //5.对数据进行解析处理        String str = new String(dp.getData(), 0, dp.getLength());        System.out.println("客户端说:"+str);        //响应客户端        String reply = "您好,我在的亲,有什么问题";        SocketAddress sa = dp.getSocketAddress(); //可以得到客户端的IP地址        //创建一个响应的数据包        DatagramPacket dp2 = new DatagramPacket(reply.getBytes(), reply.getBytes().length, sa);        ds.send(dp2); //响应数据        //6.释放资源        ds.close();    } catch (SocketException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }}

}

package com.phone.week5.day5;

import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class UDPClient1 {

public static void main(String[] args) {    try {        DatagramSocket ds = new DatagramSocket(9999);        new UDPReceiveThread(ds).start();        new UDPSendThread(ds, InetAddress.getByName("localhost"), 5555).start();    } catch (SocketException e) {        e.printStackTrace();    } catch (UnknownHostException e) {        e.printStackTrace();    }    System.out.println("客户1启动了");}

}

package com.phone.week5.day5;

import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class UDPClient2 {

public static void main(String[] args) {    try {        DatagramSocket ds = new DatagramSocket(5555);        new UDPReceiveThread(ds).start();        new UDPSendThread(ds, InetAddress.getByName("localhost"), 9999).start();    } catch (SocketException e) {        e.printStackTrace();    } catch (UnknownHostException e) {        e.printStackTrace();    }    System.out.println("客户2启动了");}

}

package com.phone.week5.day5;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPSendThread extends Thread{

private DatagramSocket ds;private InetAddress ia;private int port;public UDPSendThread(DatagramSocket ds, InetAddress ia, int port) {    super();    this.ds = ds;    this.ia = ia;    this.port = port;}@Overridepublic void run() {    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));    while(true){        try {            String line= br.readLine();            byte b[] = line.getBytes();            DatagramPacket dp = new DatagramPacket(b, b.length, ia, port);            ds.send(dp);        } catch (IOException e) {            e.printStackTrace();        }    }}

}

package com.phone.week5.day5;

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

public class UDPReceiveThread extends Thread{

private DatagramSocket ds ;public UDPReceiveThread(DatagramSocket ds) {    super();    this.ds = ds;}@Overridepublic void run() {    //创建一个接收的数组    byte b[] = new byte[1024];    //创建一个接收的数据包    DatagramPacket dp = new DatagramPacket(b, b.length);    while(true){        try {            ds.receive(dp);            String str = new String(dp.getData(), 0, 

dp.getLength());
System.out.println(str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

0 0