사용에 소켓과 ServerSocket의 차이는, 우리는 소켓을 만들 자바 서버 측에서 포트
Socket server = serverSocket.accept();
를 사용합니다. 소켓이 생성 된 후에는 소켓의 입출력 스트림을 처리하기위한 새로운 스레드를 생성 할 수 있습니다. 따라서 같은 포트에서 수신 대기하고 새로운 연결 요청이 들어 오면 새로운 소켓을 만들 수 있습니다. 이미 특정 포트에서 ServerSocket을 만들었으므로 물론 그 포트에서 다른 ServerSocket을 다시 만들 수 없습니다.
제 생각에 서버 측에서 하나의 포트 아래에 여러 개의 소켓을 만들 수 있다고 결론을 내릴 수 있습니까? 우리가 소켓을 만들 때
사실은 내 질문에, 클라이언트 측에서, 우리는 우리가 사용할 로컬 포트를 지정할 수있다 (어떤 웹 서버와 유사 않습니다). 해당 로컬 포트에서 클라이언트 소켓을 성공적으로 생성 한 후에 다른 클라이언트 소켓에 해당 포트를 재사용 할 수 있습니까? 이 포트는 소켓이 닫힐 때까지 (또는 포트가 닫힐 때까지) 소켓에 영구적으로 바인딩됩니까? 클라이언트 측에서 "Listening"개념이 없으므로 ServerSocket과 동일한 작업을 수행 할 수 있습니까 (ServerSocket이 하나의 포트 아래에 다중 소켓을 만들 수 있음을 참조하십시오)?
ServerSocket을 클라이언트 소켓과 비교하기 때문에 클라이언트 쪽에서 포트와 소켓을 처리하는 방법이 심각하게 혼동됩니다.
올바른 방향으로 나를 가리 키십시오. 제 생각이 어떻게 든 잘못되었다는 것을 알고 있습니다. 매우 감사합니다.
안녕하세요, 거의 다 얻은 것 같습니다. 나는 유효한 소켓을 만들기 위해서 유일한 (local_address, local_port, remote_address, remote_port) 쌍이 필요하다는 것을 알고있다. 예를 들어, 포트 400에서 클라이언트 소켓을 만들고 IP 123에 연결합니다.이 연결이 종료되기 전에 동일한 포트에서 400이라는 다른 클라이언트 소켓을 만들고 IP 456에 연결합니다. 두 번째 클라이언트 소켓 수락 되니? – GMsoF
TCP/IP의 경우, 아니오. 한 번에 하나의 응용 프로그램 만 단일 포트에서 수신 할 수 있습니다. 이제 2 개의 네트워크 카드가 있다면 하나의 응용 프로그램이 첫 번째 IP에서 청취하고 두 번째 응용 프로그램이 두 번째 IP에서 동일한 포트 번호를 사용하도록 할 수 있습니다. 유효한 예제는 IP 123.0.0.1에있는 두 개의 클라이언트가 포트 4000을 통해 동시에 4001을 포트 80의 서버 IP 123.0.0.2에 연결할 수 있습니다. 둘 다 서버에서 80에 연결되지만 클라이언트 측 포트의 차이점은 연결. UDP (멀티 캐스트)의 경우 여러 응용 프로그램이 동일한 포트에 가입 할 수 있지만 다른 이야기가 있습니다. – sunrize920
[다른 클라이언트 소켓을 만들 수 없습니다. 같은 항구에 묶여있다 '. 이론적으로 RFC는 다른 타겟에 연결될 수 있도록 허용하지만, 실제로는 bind()가 connect()에 우선하여 커널이 허용하지 않도록합니다. – EJP