【发布时间】:2014-06-05 09:04:24
【问题描述】:
我有一台服务器,那台机器运行服务器套接字代码。 我使用线程池来维护线程。 问题是,当我启动服务器套接字时,它的监听很好。 但是第二天我看到控制台在某个级别暂停并且没有监听任何 TCP 数据包。 没有产生异常。 java中服务器上的监听数据包是否有任何限制? 我该如何解决这个问题?
服务器类
public final class Server {
private final ServerSocket serverSocket;
private final ExecutorService pool;
public Server(int port, int poolSize)
throws IOException {
serverSocket = new ServerSocket(port);
pool = Executors.newFixedThreadPool(poolSize);
System.out.println("Server running...");
runServerEngine();
}
public void runServerEngine() { // run the service
try {
while (true) {
System.out.println("user come ");
pool.execute(new Handler(serverSocket.accept()));
}
} catch (IOException ex) {
System.out.println("Error " + ex);
//pool.shutdown();
}
}
public static void main(String[] args) throws IOException {
Server server = new Server(1256, 20);//port number and pooling size
}
}
处理类
class Handler implements Runnable {
private Socket socket = null;
//private static Location location = new Location();
Handler(Socket socket) {
this.socket = socket;
}
private Handler() {
}
String recievedPacket = null;
@Override
public void run() {
// read and service request on socket
try {
BufferedReader in = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
while ((recievedPacket = in.readLine()) != null) {
//recievedPacket = in.readLine();
System.out.println("Recieved packate " + recievedPacket);
if (recievedPacket != null) {
try {
System.out.println("Saving function " + recievedPacket);
} catch (Exception ex) {
System.out.println(ex);
}
}
}
} catch (IOException ex) {
System.out.println(ex);
}
}
}
【问题讨论】:
-
它在监听那个端口吗?尝试网络统计。你有没有进行线程转储? (通过 ctrl+break)它正在运行吗?客户端/服务器之间是否有路由器或类似设备可以断开静态 TCP 连接?
-
服务器监听没有限制,放上你的代码让我们帮你吧。
-
我认为您应该正确处理您的资源,例如关闭
Handler中的套接字和阅读器。毕竟可能是资源问题。 -
无参数 Handler 构造函数有什么用?你不需要那个。
标签: java multithreading sockets