UDP通信程序练习
- 按照下面的要求实现程序
- UDP发送程序:数据来自于键盘录入,直到输入的数据是886,发送数据结束
- UDP接收数据,因为接收端不知道发送端什么时候停止发送,故采用死循环接收
以图文和代码内容形式讲解
SendDemo
package Demo;
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
/*
UDP通信程序练习
按照下面的要求实现程序
* UDP发送程序:数据来自于键盘录入,直到输入的数据是886,发送数据结束
* UDP接收数据,因为接收端不知道发送端什么时候停止发送,故采用死循环接收
*/
public class SendDemo {
public static void main(String[] args) throws IOException {
//定义Scanner类
while(true) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
if (!s.equals("886")){
//定义socket对象(DatagramSocket类)
DatagramSocket dgs = new DatagramSocket();
//定义发送数据包的内容
DatagramPacket dgp = new DatagramPacket(s.getBytes(), s.getBytes().length, InetAddress.getByName("sgs"), 1111);
//开始发送
dgs.send(dgp);
//释放资源
dgs.close();
continue;
}else{
break;
}
}
}
}
Receive
package Demo;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
/*
接受数据的步骤:
1. 创建接收端的Socket对象(DatagramSocket)
DatagramSocket(int port)
2. 创建一个数据包,用于接收数据
DatagramPocket(byte[] but,int length)
3. 调用DatagramSocket对象的方法接收数据
void receive(DatagramPacket p)
4. 解析数据包,并把数据在控制台显示
byte[] getData()返回数据缓冲区
int getLength()返回要发送的数据的长度或接收到的数据的长度。
5. 关闭接收端
void close()
*/
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
//创建定义一个死循环接收
for (;;){
//创建以端口号为标识接受端
DatagramSocket dg = new DatagramSocket(1111);
//创建接收包
byte[] b=new byte[1024];
DatagramPacket dp = new DatagramPacket(b,b.length);
//接收数据
dg.receive(dp);
//解析数据包
String s = new String(dp.getData(), 0, dp.getLength());
System.out.println(s);
//释放资源
dg.close();
}
}
}