步骤一:
/**
* 封装成发送端
* 1.使用DatagramSocket 指定端口 创建成发送端
* 2.一定转成字节数组
* 3.包装成DatagramPacket包裹
* 4.send(DatagramPacket)
* 5.释放资源
* @author ZD.zhang
*
*/
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
public class TalkSend implements Runnable{
private DatagramSocket client;
private BufferedReader reader;
private String toIP;
private int toPort;
public TalkSend(int port,String toIP,int toPort) {
this.toIP = toIP;
this.toPort = toPort;
try {
client = new DatagramSocket(port);
//2.一定转成字节数组
reader = new BufferedReader(new InputStreamReader(System.in));
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while(true) {
try {
String data = reader.readLine();
byte[] datas = data.getBytes();
//3.包装成DatagramPacket包裹
DatagramPacket packet = new DatagramPacket(datas,0,datas.length,
new InetSocketAddress(toIP, toPort));
//4.send(DatagramPacket)
client.send(packet);
if(data.equals("bye")) {
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
//5.释放资源
client.close();
}
}
步骤二:
/**
*封装接受端
*1.使用DatagramSocket 指定端口 创建接收端
*2.封装成DatagramSocket包裹
*3.receive(DatagramSocket)
*4.分析数据
*byte[] getData()
* getLength()
*5.释放资源
* @author ZD.zhang
*
*/
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class TalkReceive implements Runnable{
//1.使用DatagramSocket 指定端口 创建接收端
private DatagramSocket server;
private String from;
public TalkReceive(int port,String from) {
this.from = from;
try {
server = new DatagramSocket(port);
} catch (SocketException e) {
e.printStackTrace();
}
}
public void run() {
while(true){
//2.封装成DatagramSocket包裹
byte[] container = new byte[1024*60];
DatagramPacket packet = new DatagramPacket(container,0,container.length);
//3.receive(DatagramSocket)
try {
server.receive(packet); //阻塞式接收
//4.分析数据
byte[] datas = packet.getData();
int len = packet.getLength();
String data = new String(datas,0,len);
System.out.println(from+":"+data);
if(data.equals("bye")) {
break;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//5.释放资源
server.close();
}
}
public class TalkStudent {
public static void main(String[] args) {
new Thread(new TalkSend(8888,"localhost",6666)).start(); //发送
new Thread(new TalkReceive(7777,"老师")).start(); //接受
}
}
public class TalkTeacher {
public static void main(String[] args) {
new Thread(new TalkReceive(6666,"学生")).start(); //接受
new Thread(new TalkSend(9999,"localhost",7777)).start();
}
}