释放/关闭网络端口?

时间:2014-09-16 18:04:25

标签: java android networking libgdx port

我正在摆弄LibGDX中的套接字。但每次我想运行我的程序时,我必须更改代码中的PORT,显然是因为此端口是由上一次运行所占用的。我可以在程序关闭时关闭端口,或者再次通过该端口连接吗?否则,我可以做什么来释放特定端口而不重新启动?

我正在运行一个单独的线程来创建套接字服务器和循环以进行接收。在这个线程下面是一个ClickListener,它向服务器发送消息,当前所有消息都在同一个应用程序中。我如何设置它以便我可以重用套接字或在程序以任何方式关闭时关闭它?

            new Thread(new Runnable(){    
            @Override
            public void run() {
                ServerSocketHints serverSocketHint = new ServerSocketHints();
                serverSocketHint.acceptTimeout = 0;
                ServerSocket serverSocket = Gdx.net.newServerSocket(Protocol.TCP, 9024, serverSocketHint);

                while(true){
                    Socket socket = serverSocket.accept(null);

                    BufferedReader buffer = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

                    try {
                        labelMessage.setText(buffer.readLine());    
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

        button.addListener(new ClickListener(){
            @Override 
            public void clicked(InputEvent event, float x, float y){

                String textToSend = new String();
                if(textMessage.getText().length() == 0)
                    textToSend = "Empty message\n";
                else
                    textToSend = textMessage.getText() + ("\n");

                SocketHints socketHints = new SocketHints();
                socketHints.connectTimeout = 4000;

                Socket socket = Gdx.net.newClientSocket(Protocol.TCP, textIPAddress.getText(), 9024, socketHints);
                try {
                    socket.getOutputStream().write(textToSend.getBytes());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });

1 个答案:

答案 0 :(得分:-2)

在绑定套接字之前调用setReuseAddress(true)

但是你应该在退出之前关闭所有套接字。