В TCP MultiThreaded Server, если клиент получает сервис, как найти номер порта обслуживающего сокета? - PullRequest
0 голосов
/ 02 июля 2010

В многопотоковом сервере TCP, если клиент получает службу, как найти номер порта обслуживающего сокета?

Из руководств Sun Java

Когда запрашивается соединение иПосле успешного установления метод accept() возвращает новый «Socket объект», который связан с тем же локальным портом, и его удаленный адрес и удаленный порт установлены на том же, что и у клиента.Сервер может связываться с клиентом через этот новый Socket и продолжать прослушивать запросы клиентского соединения на исходном ServerSocket.

Как найти номер порта для "Socketобъект "?

1 Ответ

1 голос
/ 02 июля 2010

Socket.getPort() не делает то, что вы хотите?Или вы имеете в виду, что вам нужен локальный порт (опять же, есть Socket.getLocalPort()?). Если бы вы могли привести работающий пример того, что вам нужно, это было бы легче понять.

Вот краткий пример:

import java.net.*;

public class Test {
    public static void main(String[] args) throws Exception {
        ServerSocket ss = new ServerSocket(50000);
        while (true) {
            Socket s = ss.accept();
            System.out.println("Local: " + s.getLocalPort() + 
                               "; Remote: " + s.getPort());
        }
    }
}

Если вы запустите этот код и подключитесь к нему несколько раз, вы получите что-то вроде этого:

Local: 50000; Remote: 17859
Local: 50000; Remote: 17866
Local: 50000; Remote: 17872

Так что getLocalPort() возвращает порт, который был указан вServerSocket конструктор, но getPort() каждый раз возвращает другой порт.

...