java udp 同一个端口实现收发_JAVA实现UDP协议:消息的接收和发送
发布时间
阅读量:
阅读量

前期知识
如果说通过端到端连接进行通讯的方式——比如像打电话——必须确保双方能够正常通讯(即先拔通再通话),那么类似发短信的是基于 IP 协议实现的一种非连接型传输方式。这种传输方式无需预先建立连接即可完成信息发送(即不管收信方机器是否在线以及地址是否正确均无须在意)。这种传输机制完全由发送方负责(不管接收方是否收到数据)。
代码实现
在同一个界面实现接收和发送
主界面:
public
发送端:
public class MsgSender extends MouseAdapter {
JTextField jTextField;
public MsgSender(JTextField jTextField1) {
this.jTextField = jTextField1 ;
}
public void mouseClicked(MouseEvent e) {
//UDP发送端:一台机器可能有多个IP地址,
//把数据以本机192.168.1.147地址上13000号端号,发送到192.168.1.149上的14000端口
//1.创建要用来发送的本地地址
try{
SocketAddress localAddr = new InetSocketAddress("192.168.43.56", 13000);
//2.创建发送的Socket对象
DatagramSocket dSender = new DatagramSocket(localAddr);
while(true){
System.out.println(jTextField.getText());
byte buffer[] = (jTextField.getText()).getBytes();//3.要发送的数据
//4.发送数据的目标地址和端口
SocketAddress destAdd = new InetSocketAddress("192.168.43.56", 14000);
//5.创建要发送的数据包,指定内容,指定目标地址
DatagramPacket dp = new DatagramPacket(buffer, buffer.length, destAdd);
dSender.send(dp);//6.发送
System.out.println("数据已发送:!");
Thread.sleep(1000);
}//end while
}catch(Exception e1){
e1.printStackTrace();
}
}
}
接收端:
public class MsgReciver extends Thread{
DatagramSocket recvSocket;
private JTextField jTextField;
public MsgReciver(JTextField jTextField2){
this.jTextField = jTextField2;
}
public void run() {
try{
// TODO Auto-generated method stub
//1.接收端:在本机接收的机址和等待的端口号
SocketAddress localAddr = new InetSocketAddress("192.168.43.56", 14000);
//2.接收的服务器UDP端口
recvSocket = new DatagramSocket(localAddr);
while(true){
byte[] buffer = new byte[20]; //3.指定接收缓冲区大小:每个包20字节
//4.创建接收数据包对象
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
//5.阻塞等待数据到来,如果收到数据,存入packet中的缓冲区中
System.out.println("UDP服务器等待接收数据:");
recvSocket.receive(packet); //6.在此等待接收对方发的UDP包
//得到发送方的IP和端口
SocketAddress address = packet.getSocketAddress();
//转换接收到的数据为字符串
String msg=new String(packet.getData()).trim();
//接收到后,打印出收到的数据长度
System.out.println("recv is:"+msg+" from:"+address);
jTextField.setText("recv is:"+msg+" from:"+address);
}
}catch(Exception ef){
ef.printStackTrace();
}
}
}
全部评论 (0)
还没有任何评论哟~
