- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一台服务器,我在该机器上运行服务器套接字代码。我已经使用线程池来维护线程。问题是,当我启动服务器套接字时,它监听正常。但第二天我看到控制台在某种程度上暂停,并且没有监听任何 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);
}
}
}
最佳答案
尝试关闭Handler
的finally block 中的in
和socket
以确保您的系统没有资源不足。
@Override
public void run() {
// read and service request on socket
BufferedReader in = null;
try {
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);
} finally {
if (in != null) {
try {
in.close();
} catch (IOException ex) {
// No-OP
}
}
if (socket != null) {
try {
scoket.close();
} catch (IOException ex) {
// No-OP
}
}
}
}
如果您是 Java 7+,您可能想看看 try with resources .
关于Java服务器socket程序一天后停止监听,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24055947/
我知道有一些关于这个主题的类似帖子,但没有一个对我有太大帮助(或者也许这就是因为我仍然是新手)。 无论如何,我正在寻找的是一个脚本来显示日期和日期以及从现在开始的 11 天。 下面的脚本是我用来显示当
我在 mysql 表中有一个 postdate 和 status 列。目前帖子的状态是= 1。我只想在提交帖子15天后更改状态= 0。任何人都可以提供帮助。 $todays = date('d-m-Y
我有这段代码,可以将当前日期转换为这种格式 2020-08-20 。但是我如何更改它以给出今天之后 10 天以及今天之前 10 天的日期。 例如今天是2020-08-20我试图从今天起计算10天202
我刚刚在 5 天前为我的应用上传了第 12 次更新 (APK),但它在 Google Play 中仍然不可用。通常只需要几个小时就可以使用。是否有任何解决方案/原因可能会发生这种情况?以前有人经历过吗
我已经使用 React Native 创建了一个适用于 iOS 的应用程序,但是在通过 Xcode 在实际 iPhone 上安装该应用程序几天后,它只是在我启动该应用程序 0.3 秒后退出该应用程序。
几周以来,我的 iOS 应用程序一直在运行 firebase 报告。我在 2 天前按照官方步骤添加了 crashlytics: https://firebase.google.com/docs/cra
在 javascript 中,我获取当前时刻,并向其添加 3 天。为什么年份加上 3 天仍然是 2018 年,格式为 2019 年? 当从 2 天 11 小时到 3 天 10 小时的范围内添加时,这会
我 4 天前在 google play 上发布了我的第一个应用程序(语音转短信),但我仍然无法通过它的名称或开发者名称在搜索中找到我的应用程序。我只能通过包名称或真实应用名称但没有空格 - “Voic
我在我的 Activity 中创建了一个 DatePickerDialog,我试图将 minDate 设置为 2 天后。 例如,今天是 25/5/2015,我希望最小日期为:27/5/2015 这是代
jQuery(document).ready(function(){ if (document.cookie.indexOf('visited=true') === -1) {
我是 Azure 存储帐户的新用户。在学习时我发现了以下链接: https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blob-s
我的应用在 http://talkwithstranger.com/ 上运行我已经将它部署在 AWS EC2 上。我用这个命令 sudo nohup node index.js & 即使我关闭终端并退
我是一名优秀的程序员,十分优秀!