package threadPool
import java.io.BufferedReader
import java.io.IOException
import java.io.InputStream
import java.io.InputStreamReader
import java.io.OutputStream
import java.io.PrintWriter
import java.net.ServerSocket
import java.net.Socket
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
public class ThreadPoolServer {
private int port = 8000
private ServerSocket serverSocket
private ExecutorService executorService //线程池
private final int POOL_SIZE = 4 //单个CPU时线程池中的工作线程数目
public ThreadPoolServer() throws IOException{
serverSocket = new ServerSocket(port)
//创建线程池
//Runtime 的availableProcessors()方法返回当前系统CPU的数目
//系统CPU越多,线程池中的工作线程数目越多
executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE)
System.out.println("服务器已启动!!")
}
public void service(){
while(true){
Socket socket = null
try{
socket = serverSocket.accept()
executorService.execute(new Handler(socket))
}catch(IOException e){
e.printStackTrace()
}
}
}
public static void main(String[] args) {
try {
new ThreadPoolServer().service()
} catch (IOException e) {
e.printStackTrace()
}
}
}
class Handler implements Runnable {
private Socket socket
public Handler(Socket socket) {
this.socket = socket
}
private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream socketOut = socket.getOutputStream()
return new PrintWriter(socketOut, true)
}
private BufferedReader getReader(Socket socket) throws IOException {
InputStream socketIn = socket.getInputStream()
return new BufferedReader(new InputStreamReader(socketIn))
}
public String echo(String msg) {
return "echo:" + msg
}
@Override
public void run() {
try {
System.out.println("New connection accepted:" + socket.getInetAddress() + ":" + socket.getPort())
BufferedReader br = getReader(socket)
PrintWriter pw = getWriter(socket)
String msg = null
while ((msg = br.readLine()) != null) {
System.out.println(msg)
pw.println(echo(msg))
if (msg.equals("bye")) {
break
}
}
} catch (IOException e) {
e.printStackTrace()
} finally {
try {
if (socket != null)
socket.close()
} catch (IOException e) {
e.printStackTrace()
}
}
}
}
出现这个问题的原因,就是连接远程服务的网络不通或者是端口有问题导致的。问题原因排查:
第一步:在黑窗口中输入 :ping ip是否连通;如果没问题进行第二步。
第二步:在黑窗口中输入:telnet ip 端口,查看端口是否可以访问,如果没问题进行第三步。
第三步:在黑窗口输入:ping 地址(此地址就是conn的地址)。
备注:以上三步肯定能够排查出问题原因的。如果还是不行,那么就是代码编写的有问题。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)