2010-07-21 10 views
2

나는 TCP 서버가 실행되어야하는 GUI 애플리케이션을 만들고있다. GUI는 스윙에 내장되어 있습니다. 내가 가지고있는 문제는 서버를 돌리는 것입니다. 사람들이 설치할 수있는 데스크톱 응용 프로그램을 하나 갖고 싶습니다. 그러면 차례로 서버가 시작됩니다.자바 TCP 서버

while (true) { 
    Socket client = serverSocket.accept(); 
    System.out.println("S: Receiving..."); 

가 ....

내가 서버 클래스를 호출하려고했으나 다음 블록 GUI : 서버는 즉 실행되는 동안 차단하고 있습니다. 두 패키지를 쉽게 패키징 할 수있는 동안 GUI에서 서버를 분리하는 가장 좋은 방법은 무엇이라고 생각하십니까? 어떤 도움을 주셔서 감사합니다!

답변

1

가장 쉬운 해결책은 일반적으로 ServerSocket을 다른 스레드에서 실행하는 것입니다. 비동기 IO와 같은 것을 시도해 볼 수도 있지만 실제로 고통 스럽습니다.

0

글쎄, 당신의 설명에 따르면 아마도 문제는 사용자 생성 이벤트를 처리 할 수 ​​있도록 별도의 스레드에 GUI와 서버 부분 (그 동안 (true) 포함)을 넣어야한다는 것입니다. 당신이 멀티 스레드 프로그래밍을 소개하면, 개는 많이 있다는 것을

2

Threads.

참고. 한 가지 중요한 점은 Swing 또는 GUI 요소에 대한 액세스가 스윙 이벤트 스레드에서 수행되어야한다는 것입니다. SwingWorkers을 사용하면 더 쉽게 작업을 수행 할 수 있습니다.

Java NIO을 사용할 수도 있습니다.

5

자바 프로그래밍을 소켓 두 가지 기본 방법이 있습니다

  1. 를 사용하여 하나의 스레드 소켓 당 아마
  2. 사용 비 차단 스레드 중 하나 또는 소수의 IO를

당신은 첫번째 것을 원해. 당신이 원하는 것을 당신이 모른다면, 당신은 거의 확실하게 첫 번째 것을 원합니다. 이것은 주관적이지만, 대부분의 사람들은 # 1이 올바른 것이 더 쉽다고 동의 할 것이라고 생각합니다.

여기에 an answer that discusses the difference입니다.

스레드로 결정한다고 가정하면 use a thread pool! 쉽고 깔끔합니다.

나는이 단계를 지났다고 생각하지만, 기본적인 "101"유형의 자료를 원하면 Sockets and Threads에 관한 Sun의 이전 자습서는 먼지가 많지만 유용합니다.

0

가장 간단한 것은 별도의 스레드에 서버를 구축하는 것입니다.