📄 connection.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 + -