You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
3.3 KiB
79 lines
3.3 KiB
package shellService;
|
|
|
|
import java.io.BufferedReader;
|
|
import java.io.IOException;
|
|
import java.io.InputStreamReader;
|
|
import java.io.PrintWriter;
|
|
import java.net.ServerSocket;
|
|
import java.net.Socket;
|
|
|
|
public class Service {
|
|
private ServiceGetText mServiceGetText;
|
|
|
|
|
|
public Service(ServiceGetText serviceGetText, int PORT) {
|
|
mServiceGetText = serviceGetText;
|
|
try {
|
|
/** 创建ServerSocket*/
|
|
// 创建一个ServerSocket在端口4521监听客户请求
|
|
ServerSocket serverSocket = new ServerSocket(PORT);
|
|
System.out.println("服务端运行在" + PORT + "端口");
|
|
while (true) {
|
|
// 侦听并接受到此Socket的连接,请求到来则产生一个Socket对象,并继续执行
|
|
Socket socket = serverSocket.accept();
|
|
System.out.println("监听请求到来则产生一个Socket对象,并继续执行");
|
|
new CreateServerThread(socket);//当有请求时,启一个线程处理
|
|
}
|
|
} catch (Exception e) {
|
|
System.out.println("连接监听发生错误 Exception:" + e);
|
|
}finally{
|
|
// serverSocket.close();
|
|
}
|
|
}
|
|
|
|
//线程类
|
|
class CreateServerThread extends Thread {
|
|
Socket socket;
|
|
public CreateServerThread(Socket s) throws IOException {
|
|
System.out.println("创建了一个新的连接线程");
|
|
socket = s;
|
|
start();
|
|
}
|
|
|
|
public void run() {
|
|
try {
|
|
/** 获取客户端传来的信息 */
|
|
// 由Socket对象得到输入流,并构造相应的BufferedReader对象
|
|
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
|
|
System.out.println("由Socket对象得到输入流,并构造相应的BufferedReader对象");
|
|
String line = bufferedReader.readLine();
|
|
/** 发送服务端准备传输的 */
|
|
// 由Socket对象得到输出流,并构造PrintWriter对象
|
|
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
|
|
System.out.println("由Socket对象得到输出流,并构造PrintWriter对象");
|
|
// 获取从客户端读入的字符串
|
|
System.out.println("while循环:获取从客户端读入的字符串");
|
|
System.out.println("while循环:客户端返回 : " + line);
|
|
String repeat = mServiceGetText.getText(line);
|
|
System.out.println("while循环:服务器将返回:" + repeat);
|
|
//printWriter.print("hello Client, I am Server!");
|
|
printWriter.print(repeat);
|
|
System.out.println("while循环:准备刷新返回");
|
|
printWriter.flush();
|
|
System.out.println("while循环:已刷新返回");
|
|
System.out.println("关闭Socket");
|
|
/** 关闭Socket*/
|
|
printWriter.close();
|
|
bufferedReader.close();
|
|
socket.close();
|
|
} catch (IOException e) {
|
|
System.out.println("socket 连接线程发生错误:" + e.toString());
|
|
}
|
|
}
|
|
}
|
|
|
|
public interface ServiceGetText{
|
|
String getText(String text);
|
|
}
|
|
|
|
} |