黑马程序员-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("失败");

}

}

}