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

📄 tcpipconnection.java

📁 Logica lastest SMPP API
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (c) 1996-2001 * Logica Mobile Networks Limited * All rights reserved. * * This software is distributed under Logica Open Source License Version 1.0 * ("Licence Agreement"). You shall use it and distribute only in accordance * with the terms of the License Agreement. * */package com.logica.smpp;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.IOException;import java.io.InterruptedIOException;import java.net.ServerSocket;import java.net.Socket;import java.net.SocketException;import com.logica.smpp.util.ByteBuffer;/** * Implementation of TCP/IP type of communication. * Covers both client (peer-to-peer) connection and server (new connections * from clients accepting and creating) type of connections. * * @author Logica Mobile Networks SMPP Open Source Team * @version 1.0.1, 1 Oct 2001 * @see Connection * @see java.net.Socket * @see java.net.ServerSocket * @see java.io.BufferedInputStream * @see java.io.BufferedOutputStream *//*  26-09-01 ticp@logica.com debug code categorized to groups  27-09-01 ticp@logica.com receive() rewritten not to consume cpu time while						   waiting for data on socket  27-09-01 ticp@logica.com added customizable limit on maximum received bytes						   in one call to receive()  27-09-01 ticp@logica.com added prealocated buffer for socket reads						   with customizable size  28-09-01 ticp@logica.com the io streams buffer size is customizable now  01-10-01 ticp@logica.com traces added*/public class TCPIPConnection extends Connection{	/**	 * The IP address of the remote end of the <code>socket</code>.	 */	private String address = null;	/**	 * The port number on the remote host to which the <code>socket</code>	 * is connected or port number where <code>receiverSocket</code>	 * is acception connections.	 */	private int port = 0;	/**	 * The TCP/IP (client) socket.	 *	 * @see java.net.Socket	 */	private Socket socket = null;	/**	 * An input stream for reading bytes from the <code>socket</code>.	 *	 * @see java.io.BufferedInputStream	 */	private BufferedInputStream inputStream = null;	/**	 * An output stream for writting bytes to the <code>socket</code>.	 *	 * @see java.io.BufferedOutputStream	 */	private BufferedOutputStream outputStream = null;	/**	 * Indication if the <code>socket</code> is opened.	 */	private boolean opened = false;	/**	 * The server socket used for accepting connection on <code>port</code>.	 *	 * @see #port	 * @see java.net.ServerSocket	 */	private ServerSocket receiverSocket = null;	/**	 * Indicates if the connection represents client or server socket.	 */	private byte connType = CONN_NONE;	/**	 * Indicates that the connection type hasn't been set yet.	 */	private static final byte CONN_NONE   = 0;	/**	 * Indicates that the connection is client type connection.	 * @see #socket	 */	private static final byte CONN_CLIENT = 1;	/**	 * Indicates that the connection is server type connection.	 * @see #receiverSocket	 */	private static final byte CONN_SERVER = 2;	/**	 * Default size for socket io streams buffers.	 * @see #initialiseIOStreams(Socket)	 */	private static final int DFLT_IO_BUF_SIZE = 2 * 1024;	/**	 * Default size for the receiving buffer.	 */	private static final int DFLT_RECEIVE_BUFFER_SIZE = 4 * 1024;	/**	 * The default maximum of bytes received in one call to	 * the <code>receive</code> function.	 * @see #maxReceiveSize	 * @see #receive()	 */	private static final int DFLT_MAX_RECEIVE_SIZE = 128 * 1024;	/**	 * The size for IO stream's buffers. Used by the instances of	 * <code>BufferedInputStream</code> which are used as sreams for accessing	 * the socket.	 * @see #setIOBufferSize(int)	 */	private int ioBufferSize = DFLT_IO_BUF_SIZE;	/**	 * The receiver buffer size. Can be changed by call to the function	 * <code>setReceiveBufferSize</code>. This is the maximum count of bytes	 * which can be read from the socket in one call to the socket's	 * input stream's <code>read</code>.	 * @see #setReceiveBufferSize(int)	 * @see #receive()	 */	private int receiveBufferSize;	/**	 * The buffer for storing of received data in the <code>receive</code>	 * function.	 * @see #setReceiveBufferSize(int)	 * @see #receive()	 */	private byte[] receiveBuffer;	/**	 * Max count of bytes which can be returned from one call	 * to the <code>receive</code> function. If the returned data seems	 * to be incomplete, you might want to call the <code>receive</code> again.	 * @see #setMaxReceiveSize(int)	 * @see #receive()	 */	private int maxReceiveSize = DFLT_MAX_RECEIVE_SIZE;	/**	 * Initialises the connection with port only, which means that	 * the connection will serve as connection receiving server.	 * The accepting of the connection must be invoked explicitly by	 * calling of <code>accept</code> method.	 *	 * @param port the port number to listen on	 */	public TCPIPConnection(int port)	{		if ((port >= Data.MIN_VALUE_PORT) &&			(port <= Data.MAX_VALUE_PORT)) {			this.port = port;		} else {			debug.write("Invalid port.");		}		connType = CONN_SERVER;	}	/**	 * Initialises the connection for client communication.	 *	 * @param address  the address of the remote end	 *                 of the <code>socket</code>	 * @param port     the port number on the remote host	 */	public TCPIPConnection(String address, int port)	{		if (address.length() >= Data.MIN_LENGTH_ADDRESS) {			this.address = address;		} else {			debug.write("Invalid address.");		}		if ((port >= Data.MIN_VALUE_PORT) &&			(port <= Data.MAX_VALUE_PORT)) {			this.port = port;		} else {			debug.write("Invalid port.");		}		connType = CONN_CLIENT;		setReceiveBufferSize(DFLT_RECEIVE_BUFFER_SIZE);	}	/**	 * Initialises the connection with existing socket.	 * It's intended for use with one server connection which generates	 * new sockets and creates connections with the sockets.	 *	 * @param socket the socket to use for communication	 * @see #accept()	 */	public TCPIPConnection(Socket socket)	throws IOException	{		connType = CONN_CLIENT;		this.socket = socket;		address = socket.getInetAddress().getHostAddress();		port = socket.getPort();		initialiseIOStreams(socket);		opened = true;		setReceiveBufferSize(DFLT_RECEIVE_BUFFER_SIZE);	}	/**	 * Opens the connection by creating new <code>Socket</code> (for client	 * type connection) or by creating <code>ServerSocket</code> (for	 * server type connection). If the connection is already opened,	 * the method is not doing anything.	 *	 * @see #connType	 * @see java.net.ServerSocket	 * @see java.net.Socket	 */	public void open()	throws IOException	{		debug.enter(DCOM,this,"open");		IOException exception = null;		if (!opened) {			if (connType == CONN_CLIENT) {				try {					socket = new Socket(address, port);					initialiseIOStreams(socket);					opened = true;					debug.write(DCOM,"opened client tcp/ip connection to "+address+								" on port "+port);				} catch (IOException e) {					debug.write("IOException opening TCPIPConnection "+e);					event.write(e,"IOException opening TCPIPConnection");					exception = e;				}			} else if (connType == CONN_SERVER) {				try {					receiverSocket = new ServerSocket(port);					opened = true;					debug.write(DCOM,"listening tcp/ip on port "+port);				} catch (IOException e) {					debug.write("IOException creating listener socket " + e);					exception = e;				}			} else {				debug.write("Unknown connection type = " + connType);			}		} else {			debug.write("attempted to open already opened connection ");		}		debug.exit(DCOM,this);		if (exception != null) {			throw exception;		}	}	/**	 * Closes the client or server connection.	 *	 * @see #connType	 * @see #open()	 */	public void close()

⌨️ 快捷键说明

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