共享剪切板

日常练习

我要两台电脑,日常学习时再两台电脑间复制粘贴文本很不方便,在学习了一些Socket知识后,便萌发了自己做一个共享剪切板的程序。

程序发送端会有简陋的图形化界面,将复制的文本粘贴到文本区域,按下发送按钮就会将文本文件发送到另一台电脑上,打印在控制台,并自动将文本设置到这台电脑的剪切板上。

因为才学浅陋,无法做到在此电脑上复制后无需其他操作就将文本发送到另一台电脑剪切板,希望以后能力足够后能够实现。

下面是代码:

发送端:

package Socket;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;

public class UdpSend {
	static JTextArea textData = null;
	static JButton sendBtn = null;

	public static void create() {
		JFrame f = new JFrame();

		f.setLayout(new BorderLayout());
		textData = new JTextArea(100, 100);
		sendBtn = new JButton("发送");
		sendBtn.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				send(textData.getText());

			}
		});
		f.add(textData, BorderLayout.CENTER);
		f.add(sendBtn, BorderLayout.SOUTH);

		f.setBounds(600, 250, 300, 400);
		f.setVisible(true);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	}

	public static void send(String data) {
		DatagramSocket ds;
		try {
			// 创建Socket服务,0--1024端口为系统端口或保留端口
			ds = new DatagramSocket(10000);
			// 数据打包
			byte[] p = data.getBytes();
			DatagramPacket dp = null;
			try {
				dp = new DatagramPacket(p, p.length, InetAddress.getByName("此处填上另一台电脑ip"), 8080);
			} catch (UnknownHostException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			// 发送数据
			try {
				ds.send(dp);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			// 关闭资源
			ds.close();
		} catch (SocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public static void main(String[] args) throws Exception {

		create();
		

	}

}

接收端:

package test;

import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

 public class UdpReceive {

	public static void main(String[] args) throws Exception {
		//建立Socket连接
		while(true) {
		DatagramSocket ds = new DatagramSocket(8080);
		//定义数据包。用于存储数据
		byte[] buf = new byte[2048];
		DatagramPacket dp = new DatagramPacket(buf, buf.length);
		//接收数据
		ds.receive(dp);

		String data = new String(dp.getData(),0,dp.getLength());
		System.out.println(data);
		setSysClipboardText(data);
		
		
		//关闭资源
		ds.close();
		}
	}
//设置到剪切板
	private static void setSysClipboardText(String data) {
		 Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();  
	        Transferable tText = new StringSelection(data);  
	        clip.setContents(tText, null);
		
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值