package lane.services.basic;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class LaneSocket {
private static LaneSocket self = null;
private static ServerSocket serverSocket = null;
private Socket socket = null;
private char[] cbuf = new char[8192];
private String msgHead = null;
private BufferedReader buffR = null;
private BufferedWriter buffW = null;
private Boolean blMapping = false;
//
/**
* data receive from client
*/
private String recevData = "1";
/**
* data sending to client
*/
private String sendData = "sss";
//
/**
* main method
*
* @param args
*/
public static void main(String[] args) {
try {
LaneSocket laneMain = LaneSocket.getInstance();
laneMain.socketStart();
} catch (Exception e) {
System.out.println("Socket Exception:" + e);
}
}
/**
* constructor
* @param none
*/
private LaneSocket(){
try {
/* port is 5000 */
serverSocket = new ServerSocket(54321);
} catch (IOException ioE) {
System.out.println(ioE.getMessage());
}
}
/**
* by single mode, get the instance
* @param none
*/
public static LaneSocket getInstance(){
if(self == null){
self = new LaneSocket();
}
return self;
}
/**
* server socket accept and send
*
* @throws IOException
* @param none
* @return none
*/
public void socketStart() {
/* listener */
while (!blMapping) {
if (socketHandler(serverSocket)) {
blMapping = true;
}
}
}
/**
* get message head from the socket
*
* @param serverSocket
* @return true:client message head map successfully, false: mapping failed
*/
public Boolean socketHandler(ServerSocket serverSocket) {
try {
socket = serverSocket.accept();
System.out.println("connection established......");
/* get the data from client */
buffR = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
/* set the data to client */
buffW = new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream()));
buffR.read(cbuf, 0, cbuf.length);
/* get the message head */
msgHead = new String(cbuf);
System.out.println("Message Head is:" + msgHead);
/* message is received successfully */
if (recevData.equals(msgHead)) {
/* message is response */
buffW.write(sendData);
buffW.flush();
return true;
}
} catch (IOException ioE) {
System.out.println(ioE.getMessage());
} finally {
try {
if (buffW != null) {
buffW.close();
}
if (buffR != null) {
buffR.close();
}
} catch (IOException ioE) {
System.out.println(ioE.getMessage());
}
}
return false;
}
}