2011-02-13 5 views
0

Java에서 학습 목적으로 다중 스레드 데이터 그램 소켓을 만드는 데 문제가 있습니다.UDP + java를 사용하는 다중 스레드 응용 프로그램

나는 테스트 목적과 통신을위한 다른 포트에 대해 현재 동일한 IP "localhost"를 가지고있는 두 개의 스레드 Send와 Recieve를 생성하는 Server 클래스를 가지고 있습니다.

다른 끝 나는 송신 포트에서 연결 데이터를 수신 한 다음 서버의 수신 포트를 통해 다른 패킷에 대한 요청을 제공하는 클라이언트 클래스가 있습니다.

내가 가진 문제는 내가 그들 모두를 실행할 때 서버가 데이터를 전송하는이며, 클라이언트가 있지만 반대 방향으로 .... 접수에

그래서 사람이 문제가 될 수있는 것을 알 수 있을까 ... 괜찮나 나는 여기

두 개의 스레드를 산란 코드

의 일부입니다 .... 클라이언트와 그 실행 방법을 볼 수있는 동일한 시스템에서 서버 사이의 상호 프로세스를 실행할 수 있습니다 -

SendServer SendThread = new SendServer(); 
SendThread.run(); 
RecieveServer RecieveThread = new RecieveServer(); 
RecieveThread.run(); 
송신 스레드에서

나는 로컬 호스트와 PORTNO와 DatagramPacket의 선언과 유사 나는 내가 2 개 포트 2 개 소켓을 작성하고 보내는 하나를 사용하여 클라이언트 측에서 다른 포트 번호

로를 받게되며 스레드을 위해 그것을 할 및 기타 수신 ...

이 프로그램의 오류 ... 한 번에 하나씩 실행되는 스레드 문제는 서버 쪽에서 수신하지 못하게합니까 ?? 서버와 클라이언트가 동일한 머신에서 실행하려는 경우

도와주세요 ..

답변

0

, 그들은 다른 포트 번호에서 수신해야합니다. 현재 클라이언트와 서버 모두에 대해 하나의 포트 번호를 사용하는 수신자와 클라이언트와 서버 모두에 대해 다른 서버를 사용하는 발신자가있는 것 같습니다. 그 쌍이 잘못되었습니다. 서버의 송신자와 수신자가 하나의 포트 번호를 사용하고 클라이언트의 송신자와 수신자가 다른 포트 번호를 사용하게하려고합니다.

멀티 스레딩이므로 서버에서 오는 모든 응답이 동일한 포트로 전송되는 문제가 발생할 수 있습니다. 이것은 패킷을 읽을 수 있고 어느 스레드로 가야 하는지를 구별 할 수있는 직렬화 된 소켓 판독기가 있어야한다는 것을 의미합니다. 그렇지 않으면 동일한 포트에서 수신 대기하는 소켓을 사용하면 한 소켓이 다른 스레드의 소켓을위한 라인에서 패킷을 읽을 수 있습니다.

+0

아니오 @unholysampler 혼란 스럽다면 유감스럽게 생각하지만 서버와 클라이언트 수신에 동일한 페어링을 사용하고 반대의 경우도 마찬가지입니다 ... –

+0

@ user506710 : 아직 명확하지 않은 것처럼 보일 수 있습니다. 각 소켓에 대해 사용중인 실제 포트 번호. 나는 또한 멀티 쓰레딩과 같은 포트 번호를 사용하여 나의 대답을 편집했다. – unholysampler

관련 문제