UDP

/*
 *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");
		}	
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值