2015-01-28 3 views
0

소켓 기반 clientType1 - Server - clientType2 프로그램에서 작업 중입니다.Java 소켓 두 개의 다른 스레드에서 데이터를 보내는 방법

clientType1은 데이터 (실제로는 파일) 만 서버로 보내고 서버는 clientType2로 데이터를 릴레이합니다.

clientType1 및 Type2는 여러 개일 수 있습니다.

두 개의 clientType1이 하나의 clientType2에 동시에 파일을 보내려고하면 clientType2가 두 파일 중 하나를 검색하지 못합니다.

나는 이것이 왜 일어나는 지 알 것입니다. 왜냐하면 서버의 두 스레드가 동시에 같은 소켓에 쓰려고하기 때문입니다. 이 문제를 어떻게 해결할 수 있습니까?

답변

1

클라이언트 제공 스레드가 쓰는 큐와 큐를 읽고 소켓에 데이터를 쓰는 다른 스레드 (큐는 스레드로부터 안전해야 함)를 보유합니다. 이는 가능한 가장 단순한 솔루션 중 하나입니다.

또 다른 하나는 소켓을 공유하고 synchronized{} 블록 (Java에서 동기화 기본 요소에 대해 알고 있다고 가정)에서 액세스하는 것입니다.

관련 문제