/*
*UDP:一种面向无连接的数据传输机制。优点,速度快;缺点,不安全。
*/
package classfile;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.text.*;
/**
*模拟UDP聊天。
*/
public class UDPDemo
{
public static void main(String[] args)
{
new UDPDemo();
}
//定义发送端窗体
private Frame sendFrame;
private TextArea sendTextArea;
private MenuBar sendMenuBar;
private Menu sendMenu;
private MenuItem sendMenuItem;
//定义接收端窗体
private Frame receiveFrame;
private TextArea receiveTextArea;
//定义发送端服务
DatagramSocket sendSocket;
DatagramPacket sendPacket;
byte[] sendText;
//定义接收端服务
DatagramSocket receiveSocket;
DatagramPacket receivePacket;
byte[] receiveText = new byte[1024*64];
String receiveString;
//启动UDP对话框
public UDPDemo()
{
new Thread(new Runnable(){
public void run()
{
receiveInitialize();
}
}).start();
new Thread(new Runnable(){
public void run()
{
sendInitialize();
}
}).start();
}
//初始化对话的发送端
private void sendInitialize()
{
sendFrame = new Frame("UDP通讯发送端");
sendTextArea = new TextArea();
sendMenuBar = new MenuBar();
sendMenu = new Menu("发送信息");
sendMenuItem = new MenuItem("发送");
sendFrame.setBounds(300,310,400,200);
sendFrame.setResizable(false);
sendMenu.add(sendMenuItem);
sendMenuBar.add(sendMenu);
sendFrame.setMenuBar(sendMenuBar);
sendFrame.add(sendTextArea);
try
{
sendSocket = new DatagramSocket();
}
catch (Exception e)
{
e.printStackTrace();
}
addSendListener();
sendFrame.setVisible(true);
}
//初始化对话的接收端
private void receiveInitialize()
{
receiveFrame = new Frame("UDP通讯接收端");
receiveTextArea = new TextArea();
receiveFrame.setBounds(300,100,400,200);
receiveFrame.setResizable(false);
receiveFrame.add(receiveTextArea);
try
{
receivePacket = new DatagramPacket(receiveText,receiveText.length);
receiveSocket = new DatagramSocket(13000);
}
catch (Exception e)
{
e.printStackTrace();
}
addReceiveListener();
receiveFrame.setVisible(true);
receiveMessage();
}
//添加发送端的监听器
private void addSendListener()
{
sendFrame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
sendMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
sendMessage();
}
});
}
//添加接收端的监听器
private void addReceiveListener()
{
receiveFrame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
//实现发送端服务
private void sendMessage()
{
sendText = sendTextArea.getText().getBytes();
try
{
sendPacket = new DatagramPacket(sendText,sendText.length,InetAddress.getByName("127.0.0.1"),13000);
sendSocket.send(sendPacket);
}
catch (Exception e)
{
e.printStackTrace();
}
sendTextArea.setText("");
}
//实现接收端服务
private void receiveMessage()
{
while (true)//保证接收端能够一直接受数据
{
try
{
receiveSocket.receive(receivePacket);
}
catch (Exception e)
{
e.printStackTrace();
}
receiveString = new String(receivePacket.getData(),0,receivePacket.getLength());
receiveTextArea.append(new SimpleDateFormat("yyyy-MM-dd E hh:mm:ss a").format(new Date())+"\r\n");
receiveTextArea.append("发送端主机地址:"+receivePacket.getAddress().getHostAddress()+"\r\n");
receiveTextArea.append("发送端端口号:"+receivePacket.getPort()+"\r\n");
receiveTextArea.append(receiveString+"\r\n\r\n");
}
}
}
UDP
最新推荐文章于 2023-11-30 11:37:00 发布