Is it possible to close Java sockets on both client and server sides?

前端 未结 5 820
灰色年华
灰色年华 2021-01-02 17:09

I have a socket tcp connection between two java applications. When one side closes the socket the other side remains open. but I want it to be closed. And also I can\'t wait

5条回答
  •  礼貌的吻别
    2021-01-02 17:13

    If you are still reading from your socket, then you will detect the -1 when it closes.

    If you are no longer reading from your socket, go ahead and close it.

    If it's neither of these, you are probably having a thread wait on an event. This is NOT the way you want to handle thousands of ports! Java will start to get pukey at around 3000 threads in windows--much less in Linux (I don't know why).

    Make sure you are using NIO. Use a single thread to manage all your ports (connection pool). It should just grab the data from a thread, forward it to a queue. At that point I think I'd have a thread pool take the data out of the queues and process it because actually processing the data from a port will take some time.

    Attaching a thread to each port will NOT work, and is the biggest reason NIO was needed.

    Also, having some kind of a "Close" message as part of your stream to trigger closing the port may make things work faster--but you'll still need to handle the -1 to cover the case of broken streams

提交回复
热议问题