⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 numenudpthread.java

📁 用swt作的一个类似飞鸽一样的局域网通信工具
💻 JAVA
字号:
package thread.receiver;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;

import main.NetTransfer;
import extend.Configuration;
import thread.sender.SendUDPThread;

public class NumenUDPThread extends Thread {

	public byte[] buf = new byte[100];

	public byte[] sendBuf = null;

	private DatagramSocket UDP;
	
	private DatagramSocket UDPSender ;

	private DatagramPacket packet;

	private File broadCastFile = new File("./","CastFile");

	private PrintWriter pw = null;

	private List memoryMirror = new ArrayList();
	
	private List cmdList = null;

	public NumenUDPThread() { // starting NetReceiver process BroadCast Package
		try {
			UDP = new DatagramSocket(main.NetReceiver.UDPport);
			UDPSender = new DatagramSocket();
			this.start();
			new SendUDPThread("recreate");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static List splitToken(String fs,String charActer) {
		StringTokenizer pt = new StringTokenizer(fs, charActer);
		List l = new ArrayList();
		while (pt.hasMoreTokens()) {
			l.add(pt.nextToken());
		}
		return l;
	}
	
	public void run() {
		try {
			while (true) {
				packet = new DatagramPacket(buf, buf.length);
				UDP.receive(packet);
				buf = packet.getData();
				String receiveIPPacket = new String(buf, 0, packet.getLength());
				cmdList = splitToken(receiveIPPacket,"|");
				if (((String)cmdList.get(0)).equals("broadcast")){
					sendRebound((String)splitToken((String) cmdList.get(1)," ").get(0));
					insertItem(((String) cmdList.get(1)));
				}else if (((String)cmdList.get(0)).equals("rebound")){
					insertItem(((String) cmdList.get(1)));
				}else if (((String)cmdList.get(0)).equals("removeIP")){
					removeItem(((String) cmdList.get(1)));
				}else if (((String)cmdList.get(0)).equals("recreate")){
					memoryMirror.clear();
					writeFile();
					new SendUDPThread("broadcast"); 
				}

			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			UDPSender.close();
			UDP.close();
		}
	}

	public void sendRebound(String IPAddress) throws IOException  {
		try {
			Configuration rc = new Configuration(NetTransfer.SetupFile);//相对路径
			    
			String hostName = rc.getValue("HostName");//以下读取properties文件的值
				
			if (hostName.equals("")) hostName = new String(InetAddress.getLocalHost().getHostName().getBytes());
					
			sendBuf = ("rebound|"+InetAddress.getLocalHost().getHostAddress()+" "+hostName+"|").getBytes();
			packet = new DatagramPacket(sendBuf, sendBuf.length,InetAddress.getByName(IPAddress), main.NetReceiver.UDPport);
		} catch (UnknownHostException e) {
			removeItem(IPAddress);
			e.printStackTrace();
		}
		UDPSender.send(packet);
	}
	
	public void insertItem(String receiveIPPacket) {
		
		Iterator iterator_mm = memoryMirror.iterator();
		String tempStr = null;
		boolean status = true;
		while(iterator_mm.hasNext()){
			tempStr = ((String)iterator_mm.next());
			if (tempStr.equals(receiveIPPacket)){
				status = false;
			}
		}
		if (status){
			memoryMirror.add(receiveIPPacket);
			writeFile();
		}
	}
	
	public void removeItem(String IPAddress){
		memoryMirror.remove(IPAddress);
		writeFile();
	}
	
	public void writeFile(){
		Iterator iterator_mm = memoryMirror.iterator();
		try {
			pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(broadCastFile)));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		while(iterator_mm.hasNext()){
			pw.println((String)iterator_mm.next());
		}
		pw.close();
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -