2014-03-28 3 views
2

그래서 문제가 무엇인지 확실하지 않지만 Java로 간단한 서버를 만들려고합니다. 그러나 클라이언트가 연결할 때마다 (저는 Google 크롬의 로컬 호스트 요청) 하나의 단일 클라이언트 연결이 두 번 이상 연결됩니다. (즉, 내 브라우저를 통해 서버에 연결할 때마다 서버가 "사용자 연결에 성공했습니다"2-5 번 인쇄합니다.) 주 스레드가 루프의 맨 위로 올라가서 어떻게 다시 연결할 수 있는지 확실하지 않습니다. 같은 클라이언트를 두 번 이상.동일한 소켓에 여러 번 연결하는 Java ServerSocket

... 
ServerSocket ss = new ServerSocket(9876); 
while(true) 
{ 
    Socket s = ss.accept(); 
    if(count >= queuesize || count >= numproducers) 
    { 
    System.out.println("Thread pool has reached it's limit. User access denied."); 
    //.... 
    //error message sent to user here 
    //.... 
    } 
    else 
    { 
     System.out.println("User connected successfully"); 
     for(int x=0;x<numproducers;x++) 
     { 
     if(threads.get(position).isAvailable()) 
     { 
      threads.get(x).start(s); 
      position = (position+1) % numproducers; 
      break; 
     } 
     position = (position+1) % numproducers; 
     } 
    } 
} 
+1

당신이 당신의 자신의 클라이언트를 만들 경우 발생할, 또는 텔넷 말을 사용합니까? –

+0

Chrome이 여러 번 연결되어있는 것으로 보았습니까? Linux의 경우 lsof를 사용하여 열려있는 연결을 확인하십시오. – vanza

+0

또한 클라이언트 코드를 공유하십시오. – Braj

답변

0

해결 방법은 다음과 같습니다. 도움이 될지도 모릅니다.

  • 은의 Set 또는 Map 포함하는 해시 코드를 생성하는 모든 이제 행 아래

    Socket s = ss.accept(); 
    
  • , 새로운 클라이언트가 연결을 시도 할 때마다 때마다 확인에 서버에서 Socket를 연결 자사 같은 경우 Socket 그런 다음 아무 것도하지 않거나 소켓을 닫으십시오.

+0

아무 것도 해치지 않는다는 것을 깨달았을 때 나는 여러 연결을 유지할 수도 있었지만, 그렇게하지 않기로 결정했다면 이것은 위대한 것처럼 보인다. 해결책. 감사! (나는 이것에 대해 생각했지만, 세트 사용에 대해서는 생각하지 않았다.) – Sp4mm4ge

+0

'Socket'과 같을 수는 없다. 항상 새로운 소켓입니다. 대답은 의미가 없으며 suggesitd 솔루션은 무의미합니다. – EJP

0

나는 메인 스레드가 가능한 루프의 상단에 백업 경주와 같은 클라이언트에 한 번 이상 연결할 수 있는지 모르겠습니다. 잘

:

  • 당신 accept를 그 부분에 응답 루프, 그리고이
  • 당신
더 이상의 연결을 형성하는 브라우저를 중단 할 수있는 방법은 없습니다

그래서 그렇게됩니다.

브라우저 자주 등 이미지, 스타일 시트, 자바 스크립트, 같은 포함 된 리소스를로드하는 데이 작업을 수행

관련 문제