亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tcpconnection.java

?? 關于 RFID 讀寫器的相關內容
?? JAVA
字號:
/*
 * Copyright (C) 2007 ETH Zurich
 *
 * This file is part of Fosstrak (www.fosstrak.org).
 *
 * Fosstrak is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License version 2.1, as published by the Free Software Foundation.
 *
 * Fosstrak is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with Fosstrak; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA  02110-1301  USA
 */

package org.fosstrak.reader.rprm.core.msg.transport;

import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;

import org.fosstrak.reader.rprm.core.msg.Clients;
import org.fosstrak.reader.rprm.core.msg.IncomingMessage;
import org.fosstrak.reader.rprm.core.msg.MessagingConstants;
import org.fosstrak.reader.rprm.core.msg.ReceiverHandshakeMessage;
import org.fosstrak.reader.rprm.core.msg.TcpReceiverHandshakeMessage;
import org.fosstrak.reader.rprm.core.msg.TcpSenderHandshakeMessage;
import org.apache.log4j.Logger;

/**
 * 
 * A <code>TCPConnection</code> establishes socket-based communication link.
 * However, multiple client requests can come into the same port and,
 * consequently, into the same ServerSocket. Client connection requests are
 * queued at the port, so the server must accept the connections sequentially.
 * However, the server can service them simultaneously through the use of
 * threads - one thread per each client connection.
 * 
 * @author Dijana Micijevic, ETH Zurich Switzerland, Winter 2003/04
 * @author Andreas F黵er, ETH Zurich Switzerland, Winter 2005/06
 */

public class TCPConnection extends Connection implements Runnable {

	// -------------------fields-----------------------------------------------

	/** The logger. */
	private static Logger log;

	/** Flag that indicates if the connection is still open. */
	private static boolean isOpen;

	/** Flag that indicates if there is still a client stream. */
	private boolean hasClient;

	/** The clientSocket. */
	Socket clientSocket = null;

	/** The input stream. */
	private MessageInputStream stream;

	/** The thread pool for all connections. */
	private ConnectionThreadPool threadPool = null;

	// -------------------constructor-----------------------------------------

	/**
	 * Creates a new instance of <code>TCPConnection</code>. It creates and
	 * starts a thread for a client.
	 * @param clientSocket The socket for client handling
	 */
	public TCPConnection(final Socket clientSocket) {
		this.clientSocket = clientSocket;
		hasClient = true;
		isOpen = true;
		log = Logger.getLogger(getClass().getName());
		threadPool = ConnectionThreadPool.getInstance();
	}

	// -------------------methods-----------------------------------------------

	/**
	 * Handles a client by using a separate thread which processes the messages.
	 * @see @see org.fosstrak.reader.msg.transport.Connection#handleClient()
	 */
	public void handleClient() {
		try {
			threadPool.execute(this);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	/**
	 * @see org.fosstrak.reader.rprm.core.msg.transport.Connection#close()
	 */
	public void close() {
		log.debug("Closing the TCP connection.");
		hasClient = false;
		isOpen = false;
		try {
			this.clientSocket.close();
		} catch (IOException e) {
			log.error(e.getMessage());
		}
	}

	/**
	 * @see org.fosstrak.reader.rprm.core.msg.transport.Connection#send(String)
	 */
	public void send(String outMessage) {
		try {
			DataOutputStream out = new DataOutputStream(clientSocket
					.getOutputStream());
			//send message header
			out.writeUTF(outMessage.length() + MessagingConstants.EOH);
			//send message
			out.writeUTF(outMessage);
			out.flush();
			log.debug("Response Message sent: " + outMessage);
			if (this.closeRequest) {
				close();
			}
		} catch (IOException e) {
			log.warn(e.getMessage());
			this.close();
		}
	}

	/**
	 * Sends a receiver handshake back.
	 * 
	 * @param handshake
	 */
	public void sendHandshake(TcpReceiverHandshakeMessage handshake) {
		try {
			if (handshake.isValid()) {
				BufferedWriter writer = new BufferedWriter(
						new OutputStreamWriter(clientSocket.getOutputStream()));
            String message = handshake.getReceiverSignature() + handshake.getResponse()
               + handshake.getSpecVersionResponse() + handshake.getSenderFormatResponse()
               + handshake.getReceiverFormatResponse() + handshake.getAckNakResponse()
               + handshake.getReceiverReserved() + handshake.getTrailer();
				writer.write(message);
				writer.flush();
				//writer.close(); // do not close the connection after handshake!
				log.debug("Receiver handshake sent: " + message);
			} else {
				log.error("Could not send the receiver handshake. The handshake message is invalid.");
			}
		} catch (IOException e) {
			log.warn(e.getMessage());
			this.close();
		}
	}

	/**
	 * Reads new messages from stream. It creates new incoming message and
	 * notifies all added listeners.
	 */

	public void run() {
		String message = null;

		try {
			log.debug("New TCP connection thread running!");
			stream = new TcpMessageInputStream(clientSocket.getInputStream());

			/* Connection establishing. Read the handshake */
			log.debug("Tries to read handshaking from the new connection.");
			senderHandshake = (TcpSenderHandshakeMessage) stream
					.readHandshake();
			if (senderHandshake == null) {
				log.debug("Sender handshake not valid. Send \"NO\" back.");
				TcpReceiverHandshakeMessage receiverHandshake = new TcpReceiverHandshakeMessage();
				receiverHandshake.init(senderHandshake);
				receiverHandshake
						.setResponse(ReceiverHandshakeMessage.RESPONSE_NO);
				sendHandshake(receiverHandshake);
				close();
			} else {
				Clients client = Clients.getInstance();
				client.addClient(clientSocket.getRemoteSocketAddress()
						.toString(), this);
				log.debug("adding client "
						+ clientSocket.getRemoteSocketAddress().toString()
						+ " to the clients.");

            // Send back receiver handshake
            TcpReceiverHandshakeMessage receiverHandshake = new TcpReceiverHandshakeMessage();
            receiverHandshake.init(senderHandshake);
            receiverHandshake.setResponse(ReceiverHandshakeMessage.RESPONSE_OK);
            receiverHandshake.setAckNakResponse(!senderHandshake.getAckNakEnabled());
            sendHandshake(receiverHandshake);
			}

			/* Read the messages */
			while (isOpen && hasClient) {
				log.debug("trying to read from stream!");
				message = stream.readMessage();
				if (message != null) {
					log.debug("read from stream, message = " + message);
					// put the message into the MessageBuffer
					IncomingMessage im = new IncomingMessage(this, message);
					notifyListener(im);
				} else {
					log.debug("message is null");
					IncomingMessage im = new IncomingMessage(this, message);
					notifyListener(im);
					log.warn("Client connection closed.");
					hasClient = false;
				}
			}
			clientSocket.close();
		} catch (IOException e) {
			log.debug("Cannot read from TCP Connection. Reason: "
					+ e.getMessage());
		} catch (Exception e) {
			log.error(e);
		} finally {
			// Close all streams
			stream.close();
			// Remove all clients which use this connection
			Clients clients = Clients.getInstance();
			clients.removeClient(this);
		}
	}

	
	/**
	 * 
	 * @param receiverHandshake
	 * @see org.fosstrak.reader.rprm.core.msg.transport.Connection#setReceiverHandshake(ReceiverHandshakeMessage)
	 */
	public void setReceiverHandshake(
			TcpReceiverHandshakeMessage receiverHandshake) {
		this.receiverHandshake = receiverHandshake;
	}

	/**
	 * @see org.fosstrak.reader.rprm.core.msg.transport.Connection#setSenderHandshake(SenderHandshakeMessage)
	 * @param senderHandshake
	 */
	public void setSenderHandshake(TcpSenderHandshakeMessage senderHandshake) {
		this.senderHandshake = senderHandshake;
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美激情一区在线| 欧美综合在线视频| 久久这里只有精品首页| 日本欧美久久久久免费播放网| 欧美日韩一区二区三区在线| 一区二区三国产精华液| 欧美视频完全免费看| 亚洲成av人片一区二区梦乃| 欧美美女激情18p| 青青草原综合久久大伊人精品 | 污片在线观看一区二区| 欧美色图激情小说| 日本 国产 欧美色综合| 国产亚洲综合av| 99久久久久久| 亚洲成人激情av| 日韩欧美另类在线| 国产suv精品一区二区883| 亚洲欧美怡红院| 欧美日韩一区二区三区四区五区 | 奇米一区二区三区| 精品国产91乱码一区二区三区| 国产99精品视频| 亚洲美女区一区| 欧美电影免费观看完整版| 成人免费的视频| 亚洲国产cao| 精品国产三级a在线观看| 成人av电影在线观看| 午夜久久久久久久久久一区二区| 亚洲精品一区二区三区香蕉| www.欧美亚洲| 日本欧美大码aⅴ在线播放| 欧美国产精品一区二区| 欧美色成人综合| 国产精品99久久久| 亚洲无人区一区| 国产色婷婷亚洲99精品小说| 色噜噜狠狠色综合中国| 精品一区二区精品| 亚洲资源中文字幕| 国产视频一区二区在线观看| 欧美日韩久久久| 成人黄色av网站在线| 麻豆freexxxx性91精品| 中文字幕制服丝袜成人av| 日韩一区二区三免费高清| 不卡av电影在线播放| 免费观看91视频大全| 亚洲精品国产精华液| 久久精品视频在线看| 欧美日韩国产首页| av电影在线观看不卡| 久久av资源网| 午夜视频一区在线观看| 中文字幕一区二区三| 久久老女人爱爱| 制服.丝袜.亚洲.中文.综合| 一本一本久久a久久精品综合麻豆| 久久精品72免费观看| 亚洲午夜久久久久中文字幕久| 国产精品亲子伦对白| 亚洲精品一区二区三区蜜桃下载| 欧美日韩国产中文| 91久久香蕉国产日韩欧美9色| 国产成人综合在线| 美女视频第一区二区三区免费观看网站 | 欧美区在线观看| 91黄色小视频| 色综合久久久网| 成人a免费在线看| 国产成人精品一区二区三区四区 | 亚洲一区二区三区国产| 国产精品国产三级国产普通话三级| 久久综合久久综合亚洲| 91精品在线观看入口| 欧美日韩电影在线| 欧美日韩亚洲国产综合| 91在线精品一区二区| 97se亚洲国产综合自在线不卡| 成人网男人的天堂| 懂色av中文一区二区三区| 国产麻豆午夜三级精品| 国产一二精品视频| 国产福利视频一区二区三区| 国产一区二区三区高清播放| 蜜臀av性久久久久蜜臀av麻豆| 秋霞国产午夜精品免费视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 免费观看30秒视频久久| 韩国精品免费视频| 国产一区二区h| 国产91精品一区二区| 懂色av一区二区三区免费看| 成人一区二区三区在线观看| heyzo一本久久综合| www.成人在线| 欧美三级在线播放| 欧美一卡二卡在线| 久久久精品2019中文字幕之3| 国产三级精品三级在线专区| 综合激情成人伊人| 亚洲国产aⅴ成人精品无吗| 青青草国产精品97视觉盛宴| 国内外精品视频| 波多野结衣一区二区三区| 一本到不卡精品视频在线观看 | 不卡电影免费在线播放一区| 99re热视频这里只精品| 在线不卡欧美精品一区二区三区| 日韩三级高清在线| 国产清纯白嫩初高生在线观看91 | 亚洲成av人片| 久久国产乱子精品免费女| 丰满放荡岳乱妇91ww| 欧美色精品在线视频| 欧美大片一区二区三区| 亚洲国产成人一区二区三区| 亚洲制服欧美中文字幕中文字幕| 美国av一区二区| va亚洲va日韩不卡在线观看| 欧美精品日韩精品| 中文字幕第一区综合| 午夜国产精品一区| 99视频精品全部免费在线| 欧美精品精品一区| 国产精品午夜久久| 日韩av电影免费观看高清完整版在线观看| 韩国欧美一区二区| 欧美日本在线一区| 国产人成亚洲第一网站在线播放| 亚洲成人免费在线| 国产91丝袜在线播放| 欧美欧美欧美欧美首页| 亚洲同性gay激情无套| 久久成人综合网| 91麻豆精品秘密| 久久婷婷色综合| 亚洲超碰精品一区二区| 99国产精品国产精品毛片| 精品乱人伦一区二区三区| 一区二区三区在线高清| 高清shemale亚洲人妖| 欧美大片国产精品| 天天综合色天天| 色美美综合视频| 中文字幕欧美区| 久久99久久99| 91麻豆精品国产综合久久久久久| 亚洲特级片在线| 国产精品白丝jk黑袜喷水| 日韩女优电影在线观看| 亚洲国产精品一区二区久久| 99久久伊人网影院| 国产欧美日韩麻豆91| 精品一区二区在线免费观看| 欧美一级片在线| 亚洲福利一区二区三区| 色婷婷av一区二区三区软件| 国产精品大尺度| 国产不卡在线播放| 国产欧美日韩中文久久| 国产.欧美.日韩| 国产三级精品在线| 国产成人在线视频网站| 国产亚洲欧洲一区高清在线观看| 久色婷婷小香蕉久久| 91精品福利在线一区二区三区 | 国产拍欧美日韩视频二区| 九九热在线视频观看这里只有精品| 91精选在线观看| 日韩av中文字幕一区二区| 在线不卡中文字幕| 久久精品国产99| 日韩欧美一级精品久久| 国内久久精品视频| 国产三级欧美三级日产三级99| 国产精品小仙女| 中文字幕亚洲电影| 日本精品免费观看高清观看| 一区二区三区蜜桃网| 欧美色区777第一页| 青椒成人免费视频| 久久综合色婷婷| 成人性生交大片免费看视频在线 | 精品一区二区三区在线观看| 欧美xxxx在线观看| 国产高清在线精品| 中国av一区二区三区| 色一情一伦一子一伦一区| 亚洲综合成人网| 91麻豆精品国产91久久久资源速度 | 五月激情综合网| 日韩欧美国产午夜精品| 成人午夜视频在线观看| 中文字幕在线不卡视频| 欧美在线不卡一区| 久久99日本精品| 国产精品福利在线播放| 在线视频国产一区|