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

📄 connection.java

📁 一个使用Java实现的类似与QQ的聊天程序。使用了Hibernate组建。可用于学习Java网络编程和Hiberante数据库组件的学习
💻 JAVA
字号:
package com.jim.net;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;


public class Connection {
	/**
	 * 与客户端连接的Socket
	 */
	private Socket socket;
	/**
	 * 封装在此Socket的输出流上的一个ObjectInputStream。
	 */
	protected ObjectInputStream in;
	/**
	 * 封装在此Socket的输入流上的一个ObjectOutputStream。
	 */
	protected ObjectOutputStream out;
	/**
	 * 记录了这个连接是到哪个客户端之间的连接。这个实际上就是
	 * 客户端的JIM Number。当用户成功登录后,就设置这个值。并
	 * 以这个值为key,将这个对象放入Server所维持的连接的集合里。
	 * 在client端使用的时候,这个属性表示了自己的号码。
	 */
	private int endPoint;
	/**
	 * 标志这个连接是否正在使用。
	 */
	private boolean busy = false;
	private boolean closed;
	/**
	 * 对一个Socket进行封装的构造函数。注意在实现上一定是先创建输出流,
	 * 然后再创建输入流。
	 * @param s
	 * @throws IOException
	 */
	public Connection (Socket s) throws IOException{
		this.socket = s;
		try {
			out = new ObjectOutputStream(socket.getOutputStream());
			in = new ObjectInputStream(socket.getInputStream());
			busy = false;
		} catch (IOException e) {
			e.printStackTrace();
			throw e;
		}
	}
	
	/**
	 * 发送一个对象
	 * @param o
	 */
	public void send(Object o){
		try {
			out.writeObject(o);
			out.flush();
		} catch (IOException e) {
		}
	}
	/**
	 * 读取一个对象
	 * @return
	 */
	public Object receive(){
		try {
			return in.readObject();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			return null;
		}catch (IOException e){
			e.printStackTrace();
			return null;
		}
	}
	
	public void writeLine(String str){
		this.send(str+"\n\r");
	}
	
	public String readLine(){
		String str = (String)receive();
		return str.trim();
	}
	
	/**
	 * 读取一个请求对象
	 * @return
	 */
	public RequestObject getRequest(){
		Object req = receive();
		if(req != null)
			return (RequestObject)req;
		return null;
	}
	/**
	 * 发送一个请求对象
	 * @param req
	 */
	public void sendRequest(RequestObject req){
		send(req);
	}
	public int getEndPoint() {
		return endPoint;
	}

	public void setEndPoint(int endPoint) {
		this.endPoint = endPoint;
	}

	/**
	 * 获取当前连接的使用状态
	 * @return
	 */
	public synchronized boolean isBusy() {
		return busy;
	}

	/**
	 * 设置当前连接的使用状态。
	 * @param busy
	 */
	public synchronized void setBusy(boolean busy) {
		this.busy = busy;
	}
	
	
	public void sendCommand(int command){
		try {
			out.writeInt(command);
			out.flush();
		} catch (IOException e) {
			e.printStackTrace();
			return;
		}
	}
	
	public int getCommand(){
		try {
			return in.readInt();
		} catch (IOException e) {
			//e.printStackTrace();
			return JIMProtocol.ERROR;
		}
	}
	
	public boolean isAvialable(){
		return (socket != null && socket.isBound() && socket.isConnected() && !socket.isClosed()
				&& !socket.isInputShutdown() && !socket.isOutputShutdown());
	}

	/**
	 * 关闭这个连接。实际上式关闭所使用的socekt和流
	 */
	public void close() {
		try {
			if( !closed && socket != null && !socket.isClosed()){
				closed = true;
				//out.flush();
				in.close();
				out.close();
				socket.close();
				socket = null;
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	public InetAddress getAddress(){
		if(socket.isConnected()){
			return socket.getInetAddress();
		}
		return null;
	}
}

⌨️ 快捷键说明

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