packagecom.geniuses.sewage_zero_straight.net.socket;importlombok.extern.slf4j.Slf4j;importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.IOException;importjava.net.Socket;import static com.geniuses.sewage_zero_straight.net.socket.SocketPool.*;/*** Socket操作处理类*/@Slf4jpublic classSocketHandler{/*** 将连接的Socket注册到Socket池中
*@paramsocket
*@return
*/
public staticClientSocket register(Socket socket){
ClientSocket clientSocket= newClientSocket();
clientSocket.setSocket(socket);try{
clientSocket.setInputStream(newDataInputStream(socket.getInputStream()));
clientSocket.setOutputStream(newDataOutputStream(socket.getOutputStream()));byte[] bytes = new byte[1024];
clientSocket.getInputStream().read(bytes);
clientSocket.setKey(new String(bytes, "utf-8"));
add(clientSocket);returnclientSocket;
}catch(IOException e) {
e.printStackTrace();
}return null;
}/*** 向指定客户端发送信息
*@paramclientSocket
*@parammessage*/
public static voidsendMessage(ClientSocket clientSocket, String message){try{
clientSocket.getOutputStream().write(message.getBytes("utf-8"));//clientSocket.getOutputStream().writeUTF(message);
} catch(IOException e) {
log.error("发送信息异常:{}", e);
close(clientSocket);
}
}/*** 获取指定客户端的上传信息
*@paramclientSocket
*@return
*/
public staticString onMessage(ClientSocket clientSocket){byte[] bytes = new byte[1024];try{
clientSocket.getInputStream().read(bytes);
String msg= new String(bytes, "utf-8");returnmsg;
}catch(IOException e) {
e.printStackTrace();
close(clientSocket);
}return null;
}/*** 指定Socket资源回收
*@paramclientSocket*/
public static voidclose(ClientSocket clientSocket){
log.info("进行资源回收");if (clientSocket != null){
log.info("开始回收socket相关资源,其Key为{}", clientSocket.getKey());
remove(clientSocket.getKey());
Socket socket=clientSocket.getSocket();try{
socket.shutdownInput();
socket.shutdownOutput();
}catch(IOException e) {
log.error("关闭输入输出流异常,{}", e);
}finally{try{
socket.close();
}catch(IOException e) {
log.error("关闭socket异常{}", e);
}
}
}
}/*** 发送数据包,判断数据连接状态
*@paramclientSocket
*@return
*/
public static booleanisSocketClosed(ClientSocket clientSocket){try{
clientSocket.getSocket().sendUrgentData(1);return false;
}catch(IOException e) {return true;
}
}
}