黑马程序员-UDP协议编写聊天程序
/*编写一个聊天程序
* 使用到UDP协议
* 有接收和发送数据部分
*能够同时接收和发送数据
*使用到多线程技术
*实现一条线程接收,一条线程发送。
*
* */
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;
//将输入内容存到line中
while((line=bufr.readLine())!=null)
{
//判断结束
if("886".equals(line))
break;
//将键盘获取到的内容存到数组中
byte[] buf=line.getBytes();
InetAddress i=InetAddress.getByName("192.168.1.102");
//在构造方法中指定数组,数组长度,ip地址以及端口
DatagramPacket dp=new DatagramPacket(buf,buf.length,i,10002);
//将数据写入到网络流中
ds.send(dp);
}
}
catch(Exception e)
{
throw new RuntimeException("失败");
}
}
}
class Rece implements Runnable
{
private DatagramSocket ds;
public Rece(DatagramSocket ds)
{
this.ds=ds;
}
public void run()
{
try
{
//因接收端一直处于开启状态,所以用true
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());
//打印地址和数据
System.out.println(ip+"::"+data);
}
}
catch(Exception e)
{
throw new RuntimeException("失败");
}
}
}