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

📄 udpsocketservice.java.svn-base

📁 梦界家园程序开发基底框架
💻 SVN-BASE
字号:
package jm.net.sv;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

import jm.net.ServerProcessor;
import jm.net.common.CommonKeys;
import jm.util.JMFolder;
import jm.util.JMInputStream;
import jm.util.JMOutputStream;
import jm.util.JMRpcThread;

/**
 * <p>
 * Title: JM
 * </p>
 * 
 * <p>
 * Copyright: Copyright (c) 2004-2006
 * </p>
 * 
 * <p>
 * Company: 1SHome
 * </p>
 * 
 * <p>
 * 
 * @author Spook
 *         </p>
 * 
 * @version 1.2.5.2
 * @see JDK 1.5.0.6
 */
public class UDPSocketService extends JMRpcThread implements CommonKeys {
	final String CLASS_NAME = "SocketServerService";

	private DatagramSocket sendSocket_ = null;

	private DatagramSocket receiveSocket_ = null;

	private DatagramPacket sendPacket_ = null;

	private DatagramPacket receivePacket_ = null;

	private byte[] sendDataStream_ = null;

	private byte[] receiveDataStream_ = null;

	private int sendPort_ = 0;

	private int receivePort_ = 0;
	
	private InetAddress receiveInetAddress = null;

	private int size_ = SIZE_1K;

	public UDPSocketService(int sendPort, int receivePort) {
		sendPort_ = sendPort;
		receivePort_ = receivePort;
		receiveDataStream_ = new byte[size_];
	}

	/**
	 * 打开通信端口
	 * 
	 * @return
	 */
	public synchronized boolean openReceiveService() {
		try {
			receiveSocket_ = new DatagramSocket(receivePort_);
			start();
			return true;
		} catch (Exception ex) {
			ex.printStackTrace();
			return false;
		}
	}

	public void run() {
		while (true) {
			try {				
				receivePacket_ = new DatagramPacket(receiveDataStream_, size_);
				receiveSocket_.receive(receivePacket_);
				receiveInetAddress = receivePacket_.getAddress();
				receiveDataStream_ = receivePacket_.getData();
				// 恢复传送数据对象
				JMInputStream _inStream = new JMInputStream(receiveDataStream_);
				JMFolder _in = new JMFolder(_inStream);
				System.out.println("ooo==="+_in);
				String className = _in.getStringValue(CONNECT_CLASS_NAME);
				ServerProcessor _serverProcessor = (ServerProcessor) (Class
						.forName(className).newInstance());
				// 收到数据后进行处理(无返回)
				_serverProcessor.doProcessor(_in);
			} catch (Exception ex) {
			}
		}
	}

	/**
	 * 发送数据包
	 * 
	 * @param send
	 */
	public boolean send(JMFolder send) {
		try {
			sendSocket_ = new DatagramSocket(sendPort_);
			JMOutputStream _outStream = new JMOutputStream();
			send.serializeTo(_outStream);
			sendDataStream_ = _outStream.toByteArray();
			sendPacket_ = new DatagramPacket(
					sendDataStream_,
					sendDataStream_.length, 
					InetAddress.getByName(send.getStringValue(CONNECT_HOST_NAME)),
					receivePort_);
			sendSocket_.send(sendPacket_);
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		sendPacket_ = null;
		sendSocket_ = null;
		return true;
	}

	/**
	 * 关闭通信端口
	 * 
	 * @return
	 */
	public synchronized boolean closeServer() {

		sendPacket_ = null;
		receivePacket_ = null;
		sendSocket_ = null;
		
		receiveSocket_ = null;
		//System.exit(0);
		return true;
	}

	public InetAddress getIPAddress() {
		return receiveInetAddress;
	}
	
}

⌨️ 快捷键说明

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