sender.java

来自「一款很好玩的简单的坦克游戏」· Java 代码 · 共 92 行

JAVA
92
字号
/*
 * Created on 2005-2-13
 *
 * comm
 */
package communication;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.*;
import java.io.*;

/**
 * @author Emtry Immortal
 * 
 * sender
 */
public class Sender {
	private DatagramSocket socket;

	Vector vMsg = new Vector();

	/**
	 *  
	 */
	public Sender(int port) {
		super();
		try {
			//creat send udp套接字,指定套接字口。
			socket = new DatagramSocket(port);

			//this.setPriority(Thread.MIN_PRIORITY);

			//this.start();
		} catch (SocketException e) {
			e.printStackTrace();
		}

	}

	public void send(Message msg, InetAddress address, int port) {
		byte[] sendBuf = null;
		ByteArrayOutputStream byteStream = new ByteArrayOutputStream(128);
		try {
			ObjectOutputStream os = new ObjectOutputStream(
					new BufferedOutputStream(byteStream));
			os.writeObject(msg);
			os.flush();
			sendBuf = byteStream.toByteArray();
		} catch (IOException e) {
			e.printStackTrace();
		}
		//创建udp数据包以发送数据
		DatagramPacket packet=null;
		packet = new DatagramPacket(sendBuf, sendBuf.length, address, port);
		SendNoteTask sendNtk=new SendNoteTask(socket,packet);
		Thread sndntk=new Thread(sendNtk);
		sndntk.start();
	}

	public void close() {
		//发送完毕关闭套接字。
		socket.close();
	}
}

class SendNoteTask implements Runnable {
	private DatagramSocket socket;

	private DatagramPacket packet;

	/**
	 * @param socket
	 * @param packet
	 */
	public SendNoteTask(DatagramSocket socket, DatagramPacket packet) {
		super();
		this.socket = socket;
		this.packet = packet;
	}
	
	public synchronized void run() {
		try {
			socket.send(packet);
			packet = null;
		} catch (Throwable t) {
			t.printStackTrace();
		}
	}
}

⌨️ 快捷键说明

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