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

📄 receiver.java

📁 坦克游戏
💻 JAVA
字号:
/*
 * Created on 2005-2-13
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package communication;

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Vector;

/**
 * @author Emtry Immortal
 * 
 * TODO To change the template for this generated type comment go to Window -
 * Preferences - Java - Code Style - Code Templates
 */
public class Receiver extends Thread {
	private DatagramPacket packet;

	private DatagramSocket socket;

	private byte[] recvBuf = new byte[256];

	private Message msg = null;

	private Vector vListeners = new Vector();

	private int port;

	public Receiver(int port) {
		try {
			//创建udp包以接受数据。
			packet = new DatagramPacket(recvBuf, recvBuf.length);

			//创建接受方的udp端口以接收数据
			socket = new DatagramSocket(port);

			this.port = port;

			//this.setPriority(Thread.MIN_PRIORITY);
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public int getReceivePort() {
		return this.port;
	}

	public void close() {
		socket.close();
	}

	public void run() {
		try {
			while (true) {
				//接受数据
				socket.receive(packet);

				ByteArrayInputStream byteStream = new ByteArrayInputStream(
						recvBuf);
				ObjectInputStream is = new ObjectInputStream(
						new BufferedInputStream(byteStream));
				Object obj = is.readObject();
				msg = (Message) obj;
				is.close();
				for (int i = 0; i < vListeners.size(); i++) {
					ReceiverNoteTask recNtk = new ReceiverNoteTask(
							(IMsgListener) vListeners.get(i), msg, packet
									.getAddress());
					Thread notTh = new Thread(recNtk);
					notTh.start();
				}
			}
		} catch (Throwable t) {
			t.printStackTrace();
		}
	}

	public void addListener(IMsgListener mls) {
		vListeners.addElement(mls);
	}
}

class ReceiverNoteTask implements Runnable {
	IMsgListener obj;

	Message msg;

	InetAddress address;

	/**
	 * @param obj
	 * @param msg
	 * @param address
	 */
	public ReceiverNoteTask(IMsgListener obj, Message msg, InetAddress address) {
		super();
		this.obj = obj;
		this.msg = msg;
		this.address = address;
	}

	public void run() {
		if (obj != null) {
			obj.receiveMessage(msg, address);
		}
	}
}

⌨️ 快捷键说明

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