chat类:
package cn.itcast.chat.demo;
import java.net.DatagramSocket;
import java.net.SocketException;
public class ChatDemo {
public static void main(String[] args) throws SocketException {
DatagramSocket send=new DatagramSocket();
DatagramSocket rece=new DatagramSocket(10001);
SendDemo sd=new SendDemo(send);
ReceDemo rd=new ReceDemo(rece);
new Thread(rd).start();
new Thread(sd).start();
}
}
发送类:
package cn.itcast.chat.demo;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class SendDemo implements Runnable {
private DatagramSocket ds;
public SendDemo(DatagramSocket ds) {
super();
this.ds = ds;
}
@Override
public void run() {
try {
//2、把数据放到包里
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
String len=null;
while((len=buf.readLine())!=null) {
byte[]buff=len.getBytes();
DatagramPacket dp=
new DatagramPacket(buff, buff.length, InetAddress.getByName("192.168.1.255"), 10001);
//3、使用udp将数据包发送出去,使用Send方法
ds.send(dp);
if("over".equals(len))
break;
}
//4、关闭流
ds.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}
接受类:
package cn.itcast.chat.demo;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class ReceDemo implements Runnable {
private DatagramSocket ds;
public ReceDemo(DatagramSocket ds) {
super();
this.ds = ds;
}
@Override
public void run() {
try {
// 2、创建数据包用于存储接收到的数据
byte[]buff=new byte[1024];
DatagramPacket dp=new DatagramPacket(buff, buff.length);
while(true) {
// 3、将数据存储到数据包中
ds.receive(dp);
// 4、通过数据包中的方法,解析其中的数据,如ip地址,端口号,内容
String ip=dp.getAddress().getHostAddress();
int port=dp.getPort();
String date=new String(dp.getData(), 0, dp.getLength());
if(date.equals("over"))
System.out.println("已退线");
System.out.println(ip+":::"+port+":::"+date);
}
} catch (Exception e) {
}
}
}