2012-11-27 2 views
0

예를 들어 서버 프로그램에서 파일 전송 메커니즘을 작성하여 기존의 연결 소켓을 사용하여 보낸 사람 A에서 사용자 B로 파일 바이트 하나를 가져 오려고하면 케빈계속 진행중인 다른 스트림 판독기 스레드를 보관하는 방법

많은 감사합니다 ...이 모든 진행중인 채팅 스트림이 명확 대기를 유지하고 떨어져 서버 측에서 추가 ServerSocket의를 만드는에서이 두 개의 스레드 사이에 통지 즉, 들어오는와 인터리빙 피할 수있는 것은

+0

에 연결합니다. –

답변

3

는 메시지 프로토콜을 만들 다양한 메시지 유형을 구별하는 앱용 "파일 청크"메시지와 "채팅"메시지 및 필요한 다른 메시지를 만드십시오.

의사 코드 : 여러`Socket`s를 통해

// sending method 
public synchronized void send(Message msg) { 
    // write message to socket ... 
} 

// receiving method 
while(true) { 
    Message msg = readMessage(); // read message from socket 
    handleMessage(msg); // may want to push this work to another thread 
} 
+0

u는 각 클라이언트에 대해 하나의 소켓이이 문제에 대해 충분 함을 나타냅니다. 그렇다면 응답이 들어오는 스트림을 인터리브하는 동시 문제에 대한 내 질문을 자르지 않았습니다. – Saint

+0

@Saint - 예, 소켓 연결을 하나만 가정합니다. 메시징 프로토콜을 구현하면 동일한 소켓 연결을 통해 다양한 유형의 통신을 멀티 플렉스 할 수 있습니다. – jtahlborn

+0

하나의 소켓 만 하나의 inputstream을 생성 할 수 있습니다. 유형에 따라 msg를 다르게 처리합니다. – Saint

관련 문제