----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! -----------
黑马程序员_java高级篇网络编程UDP实战Day7(下)
这篇主要记录自己学习UDP的实践
不管是UDP还是TCP,都是建立在Socket基础上的,使用UDP发送数据的步骤:
(一)简单发送包
发送包
1, 建立发送端,接收端
//创建udp服务
DatagramSocket socket=new DatagramSocket();
2, 建立数据包
//构造数据包 DatagramPacket pocket=new DatagramPacket("abc".getBytes(),3,InetAddress.getByName("192.168.1.100"),10001);
//调用socket发送的方法
socket.send(pocket);
//关闭socket
socket.close();
接收包
DatagramSocket socket1=new DatagramSocket(10001);
//2,定义一个数据包,要存贮接收的数据,因为数据包中有更多功能提取数据
byte[] b=newbyte[1024];
DatagramPacket pocket1=new DatagramPacket(b,b.length);
//3,接收
socket1.receive(pocket1);//阻塞式方法
//4拿出数据
System.out.println(pocket1.getLength());
//5,关闭资源
socket1.close();
效果图:
(二)自行输入
如果将发送端中改成自己输入,这又要设及到IO流了,如下(将输入端的代码改变一下就可以):
BufferedReader br=new BufferedReader(newInputStreamReader(System.in));
String str="";
try {
while((str=br.readLine())!=null)
{
DatagramSocket sock=new DatagramSocket();
DatagramPacket p=new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("192.168.1.100"),10011);
sock.send(p);
}
(三)可以接收也可以发送
设及到多线程问题,因为在发送的时候要接收,在接收的时候要发送。
如下写两个线程类
class Rece implements Runnable
{
public void run() {
// TODO Auto-generatedmethod stub
DatagramSocket sock = null;
try {
sock = new DatagramSocket(10011);
} catch (SocketException e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
}
while(true)
{
byte[] b=new byte[1024];
DatagramPacket p=new DatagramPacket(b,b.length);
try {
sock.receive(p);
} catch (IOException e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
}
}
}
}
class Sendinfor implements Runnable
{
public void run() {
// TODO Auto-generatedmethod stub
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int len=0;
String str="";
try {
while((str=br.readLine())!=null)
{
DatagramSocket sock=new DatagramSocket();
DatagramPacket p=newDatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("192.168.1.100"),10011);
sock.send(p);
}
} catch (SocketException e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
}
}
}
在线程中启动
Rece re=new Rece();
Sendinfor sif=new Sendinfor();
new Thread(re).start();
newThread(sif).start();
----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! -----------