Maison  >  Questions et réponses  >  le corps du texte

java - 关于socket长连接 新手向

TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,基于TCP的socket应该也是长连接;


   public static void main(String[] args) throws IOException {
       Socket s = new Socket("127.0.0.1", 8081);
   }

我不明白一点,就是运行如上代码,会得到一个socket(假设服务器已开启),可是为什么我运行后程序会自动结束并关闭socket呢?我明明没有调用s.close(),

请问如何使程序保持长连接,只能用while(true)形式的心跳包吗?如果是,那在心跳期间我怎么能发送有效的数据(假设心跳数据为无效的)呢?

PHP中文网PHP中文网2716 Il y a quelques jours316

répondre à tous(2)je répondrai

  • 阿神

    阿神2017-04-18 10:19:02

    Votre code peut indiquer que le fil a fini de recycler la socket connexion. Je ne sais pas avec quoi le server dont vous parlez a été développé. S'il s'agit d'un socket natif, il semble qu'un paquet de battement de cœur ne soit pas requis par défaut pour maintenir la connexion. Il n'est requis que si d'autres frameworks. sont utilisés et idle time est défini. Les paquets Heartbeat sont utilisés pour maintenir cette connexion. Le serveur pense que vous ne pouvez pas vous reconnecter après avoir été inactif pendant un certain temps, il ferme donc votre connexion pour éviter de gaspiller des ressources. (Compréhension personnelle)

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-18 10:19:02

    Cela devrait signifier que le fil de discussion principal est terminé. Veuillez ajouter un Thread.sleep(1000000) à la fin et essayez-le.

    répondre
    0
  • Annulerrépondre