UDP键盘录入数据方式:
read和receive都是阻塞式方法,如果接收不到数据,就会等待。
java.net包和java.io包通常一起使用。
代码:
public class code
{
public static void main(String[] args) throws IOException
{
DatagramSocket ds=new DatagramSocket(10001);
BufferedReader bufr=
new BufferedReader(new InputStreamReader(System.in));
String line=null;
while((line=bufr.readLine())!=null)
{
byte[] buf=line.getBytes();
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),10000);
ds.send(dp);
}
ds.close();
}
}
import java.net.*;
import java.io.*;
public class code
{
public static void main(String[] args) throws Exception
{
DatagramSocket ds=new DatagramSocket(10000);
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(buf,0,dp.getLength());
System.out.println(ip+"::"+data);
}
}
}
编写一个聊天程序:
有收数据的部分和发数据的部分。这两部分需要同时执行,需要用到多线程技术。
一个线程控制收,一个线程控制发。
代码:
import java.io.*;
import java.net.*;
public class Main {
public static void main(String args[]) throws Exception {
DatagramSocket sendSocket = new DatagramSocket();
DatagramSocket raceSocket = new DatagramSocket(10002);
//线程开启
new Thread(new Send(sendSocket)).start();
new Thread(new Race(raceSocket)).start();
}
}
class Send implements Runnable
{
private DatagramSocket ds;
Send(DatagramSocket ds)
{
this.ds = ds;
}
public void run()
{
try {
//读取键盘
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
String line = null;
//持续读入
while((line=bufr.readLine())!=null) {
if("886".equals(line))
break;
byte[] buf = line.getBytes();
//发送的位置
DatagramPacket dp = new DatagramPacket(buf, buf.length,
InetAddress.getByName("192.168.1.255"),10002);
ds.send(dp);//投递
}
} catch (Exception e) {
throw new RuntimeException("发送端失败");
}
}
}
class Race implements Runnable
{
private DatagramSocket ds;
Race(DatagramSocket ds)
{
this.ds = ds;
}
public void run()
{
try {
//循环接收
while(true) {
byte[] buf = new byte[1024];//缓冲区
//数据包存储数据
DatagramPacket dp = new DatagramPacket(buf, buf.length);
ds.receive(dp);//将接收到的数据,存储到数据包中
//获取IP和Date
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(), 0, dp.getLength());
System.out.println(ip+":"+data);
}
} catch (Exception e) {
throw new RuntimeException("接收端失败");
}
}
}