2017-03-07 2 views
0

새로운 P2P 전용 소프트웨어를 시작합니다. TCP 소켓을 사용해야하며 UDP는 사용하지 않아야합니다. 그리고 NAT에 대해 걱정하지 마십시오.P2P 연결 소프트웨어에서 TCP 소켓을 어떻게 처리해야합니까?

저는이 유형의 소프트웨어와 네트워크를 새로 개발하면서 몇 가지 질문을합니다. 이 소프트웨어는 다음을 수행 할 수 있어야합니다. 친구 추가, 친구들과 채팅, 친구로부터 파일 다운로드, 멀티 소스 포함.

내 질문 :

- 통신 프로토콜 : 직렬화 된 객체를 사용해야합니까? Json일까요? 나는 Json이 더 가볍고 빠르다고 생각한다.

- 통신, 채팅 및 파일 전송을위한 P2P 연결 및 소켓을 어떻게 처리해야합니까? 모든 P2P 소프트웨어처럼 파일들을 나누어서 공유하려고합니다. 하지만 소켓은 어떻게 처리해야합니까? 나는 한 친구를위한 소켓 하나만을 의미합니까? 아니면 친구가 채팅을하고 그 다음에 파일을 다운로드/업로드하는 데 하나 더 소켓을위한 소켓일까요? 모든 소켓에 하나의 소켓 만 사용해야합니까?

-how p2p 소프트웨어는 chuncks 파일을 다운로드하는 순서를 알고 있습니까?

현재 개발이 빠르고 쉽기 때문에 자바를 사용하고 있습니다.


질문 :

어떻게 소켓을 처리해야합니까? 모든 동작을 위해 한 친구를위한 소켓 하나 또는 채팅 할 친구를위한 소켓 그리고 파일 다운로드/업로드 당 하나 더 많은 소켓?

+0

이 질문은 너무 광범위하고 논쟁의 여지가 있습니다. 이 모든 것을 수행 할 수있는 많은 방법이 있으므로 SO는 당신에게 물마루를 제공하는 플랫폼이 아닙니다. [ask]를 읽고 구현과 관련된 특정 문제에 대해 질문하십시오. – Fildor

+0

주요 질문은 질문 2, 나머지는 사람들이 물어볼 경우를위한 세부 사항입니다. – juanjo

+0

다시, 그것은 유감입니다. 나는 * I * 할 것이라고 당신에게 말할 수 있지만 그것은 그것이 당신을 위해 작동한다는 것을 의미하지는 않습니다. 다른 사용자는 그 문제에 대해 다른 견해를 가질 수 있습니다. * 할 수없는 것은 모든 연결에 하나의 소켓을 사용한다는 것입니다. TCP는 "1 : 1"입니다. 채팅을 방해 할 수 있으므로 업로드/다운로드에 다른 채널을 사용하는 것이 좋습니다. 그렇다면 직렬화 된 객체를 사용하지 않고 XML 또는 JSON 등의 형태로 데이터 추상화를 사용합니다. 어쩌면 나중에 JavaScript 또는 C#/.net 또는 Python (...) 클라이언트 ... 직렬화 된 Java 객체를 추가하려는 경우가 있습니다. – Fildor

답변

0

소켓 개념은 서버 설정과 관련하여 모든 클라이언트를 소켓 ID로 공유합니다. 서버는 그 결과로 서버를 연결 풀에 등록하려고 시도합니다. 사용자의 환경은 멀티가되어야합니다. 클라이언트로부터의 동시 요청을 처리하기 위해 쓰레드. 오라클 가이드를 읽으십시오.보다 일관된 방식으로 개념을 이해하는 데 매우 유용합니다. http://docs.oracle.com/javase/tutorial/networking/sockets/

+0

나는 그 모든 것을 알고있다. 클라이언트가 채팅 또는 파일 공유 또는 질문에 사용할 소켓 수에 대한 질문에 대답하지 않습니다. – juanjo

+0

모든 클라이언트마다 하나의 소켓 만 있으면 중앙 소켓 하나가 마스터 소켓이됩니다. 그러면 들어오는 연결 인 하위 소켓입니다. – Remario