package p3.chat;
import java.net.DatagramSocket;
import java.net.SocketException;
import javax.xml.crypto.Data;
public class ChatDemo {
public static void main(String[] args) throws SocketException {
DatagramSocket send=new DatagramSocket(1000);
DatagramSocket rece=new DatagramSocket(10001);
new Thread(new Send(send)).start();
new Thread(new Rece(rece)).start();
}
}
package p3.chat;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class Rece implements Runnable {
private DatagramSocket ds;
public Rece(DatagramSocket ds) {
this.ds=ds;
}
@Override
public void run() {
try {
while(true) {
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
//3 使用receive方法将数据存的数据包中
ds.receive(dp);//阻塞式 还没收到数据 所以在等待
//4 通过数据包对象的方法,解析其中的数据 比如地址 端口 数据内容
String ip=dp.getAddress().getHostAddress();
int port=dp.getPort();//端口(发送端)
dp.getData();//数据
String text=new String(dp.getData(), 0, dp.getLength());
System.out.println(ip+":"+port+":"+text);
if(text.equals("886")) {
System.out.println(ip+"....退出聊天室");
}
}
} catch (Exception e) {
}
}
}
package p3.chat;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Send implements Runnable {
private DatagramSocket ds;
public Send(DatagramSocket ds) {
this.ds=ds;
}
@Override
public void run() {
try {
BufferedReader bfr=new BufferedReader(new InputStreamReader(System.in));
String line=null;
while((line=bfr.readLine())!=null) {
byte[]buf=line.getBytes();
DatagramPacket dp=new DatagramPacket(buf, buf.length,InetAddress.getByName("10.194.43.59"),10001);//只要接收端端口是10000不管发送端端口是多少都能接受
ds.send(dp);
if("886".equals(line))
break;
}
ds.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}