1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및...
DESCRIPTION
INDEX. 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도 7. 시험 환경 및 결과 8. 결론 및 개 선 방안. 1. 전체 시스템 구성도 [System Architecure]. 1 . 전체 시스 템 구성도 [ System Architecure]. p2ppeer / p2pserver. sharing. packets. peers. Packet. Peer. FileManager. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/1.jpg)
1. 전체 시스템 구성도
2. 개발환경
3. 사용자 명령어
4. 패킷 구조 및 데이터 구조
5. 알고리즘 및 구현 코드
6. 데이터 흐름도
7. 시험 환경 및 결과
8. 결론 및 개선 방안
INDEX
![Page 2: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/2.jpg)
1. 전체 시스템 구성도 [System Architecure]
![Page 3: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/3.jpg)
JAVA Runtime Environment 7u7
Microsoft Windows 7 Ultimate
p2ppeer / p2pserver
Console
Listener
Main
packets
Packet
Pack-etHandler
RelayMan-ager
peers
Peer
PeerManager
sharing
FileManager
SharedFile
1. 전체 시스템 구성도 [System Architecure]
![Page 4: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/4.jpg)
2. 개발환경 [Develodment Environment]
![Page 5: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/5.jpg)
2. 개발환경 [Development Environment]
그래픽 사용자 인터페이스윈도우
객체 지향 프로그램자바
![Page 6: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/6.jpg)
3. 사용자 명령어 [User Commands]
![Page 7: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/7.jpg)
3. 사용자 명령어 [User Commands]
>quit 프로그램 종료>show peers 접속한 peer 의 목록 표시>show files all 전체 공유파일 목록 표시>show files <peerID> 해당 peer 의 공유파일 목록 표시
>quit 프로그램 종료>register <peerID> peerID 로 사용자 등록>share <fileName> 공유 목록에 해당 파일 추가>show server 접속한 서버 IP, Port 를 표시>find file <fileName> 파일 검색>find peer<fileID> 파일 보유중인 peer 검색>get <filename> <peerID> <peerPort>
상대 peer 에게 파일 전송 요청
자원관리서버
Peer 프로그램
![Page 8: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/8.jpg)
4. 패킷 및 데이터 구조 [Packet and Data Structures]
![Page 9: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/9.jpg)
4. 패킷 및 데이터 구조 [Packet and Data Structures]
패킷에 따라동작을 지정하거나처리 결과로 사용할
패킷의 데이터의길이를 표현
패킷의 종류 ,
종류에 따라번호를 매겨 사용
packet_type
packet_option
data_length
1byte
1byte
4byte
서버에 전달할메시지의 내용
data
![Page 10: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/10.jpg)
4. 패킷 및 데이터 구조 [Packet and Data Structures]
public class Packet {
public byte mType; // 패킷 종류public byte mOption; // 패킷 처리에 사용할 옵션public int mPayloadSize; // 패킷 데이터의 길이public char [] mPayload; // 패킷 데이터
}
public class SharedFile {
public int mField; // 서버에 등록된 파일 ID
public String mFileName; // 파일 이름public long mFileSize; // 파일 크기public String mFileMD5; // 파일의 MD5 체크섬
}
| 패킷 정보
| 파일 정보
![Page 11: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/11.jpg)
4. 패킷 및 데이터 구조 [Packet and Data Structures]
public class Peer extends Thread {
public int mPeerIndex; // 피어 인덱스 번호public Socket mSocket; // 피어 간 통신에 사용되는 소켓public String mPeerAddress; // IP 주소public int mPeerPort; // Port 번호public String mPeerId; // 서버에 등록한 Username
public boolean mLeaderPeer = false; // 리더피어 여부public boolean mHolePunched = false; // 홀펀칭 성공 여부public long mLastHeartbeat = 0; // 마지막 Heartbeat 송수신한 시간public int mLoads; // 부하 정도public boolean mInitialized = false; // 등록과정 완료 여부public boolean mRunning = false; // 피어 스레드 동작 컨트롤
}
| 피어 정보
![Page 12: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/12.jpg)
5. 알고리즘 및 구현코드 [Algorithms and Codes]
![Page 13: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/13.jpg)
5. 알고리즘 및 구현코드 [Algorithms and Codes]
MD5 메시지문자열로 변환
MD5 메시지생성
각 바이트의상하위 워드 분리
워드를문자열로 재결합
Mes-sage
Digest
Start
public static String MakeMD5(byte[] stream) { StringBuffer md5 = new StringBuffer();
try { byte[] digest = MessageDigest.getInstance("MD5").digest(stream);
for (int i = 0; i < digest.length; i++) { md5.append(Integer.toString((digest[i] & 0xf0) >> 4, 16)); md5.append(Integer.toString(digest[i] & 0x0f, 16)); } } catch (Exception e) { }
return md5.toString();}
End
![Page 14: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/14.jpg)
5. 알고리즘 및 구현코드 [Algorithms and Codes]
서버에 릴레이준비 알림
Start
End
파일 보유중인피어 접속
인증코드 및 파일 전송
파일 전송 패킷으로 변환
파일 전송
파일 없음알림
요청 받은파일 존재 ?
리더피어 ?홀펀칭 성공 ?
// 서버에 릴레이 준비 알림if (PeerManager.get(0).isLeaderPeer() || PeerManager.get(0).isHolePunched()) { String auth = RelayManager.addRelay(peer, packet.getPayload()); packet.setType(TYPE_RELAY_PEERS); packet.setOption((byte) 0); packet.setPayload(auth + "\t" + packet.getPayload()); PeerManager.get(0).write(packet);} else { packet.setType(TYPE_GENERAL_MESSAGE); packet.setOption(GMSG_FILE_NOT_FOUND); packet.setPayload(""); peer.write(packet); peer.setRunning(false);}
// 서버에서 응답받은 인증코드 저장 ( 릴레이 피어 )msg = packet.getPayload().split("\t");RelayManager.replaceAuth(msg[0], msg[1]);
// 서버에서 전달받은 릴레이 피어의 주소로 접속 , 인증코드와 파일 전송msg = packet.getPayload().split("\t");c.connect(new InetSocketAddress(msg[2], Integer.parseInt(msg[3])));Peer p = new Peer(PeerManager.popIndex(), c);String ts = msg[0] + "\t" + msg[1] + "\t" + f.getFileName() + "\t";BufferedReader br = new BufferedReader(new FileReader(f.getFileName()));char fbuf[] = new char[Packet.MAX_PAYLOAD_SIZE];int tn = ts.getBytes().length;System.arraycopy(ts.toCharArray(), 0, fbuf, 0, tn);int nread = br.read(fbuf, tn, Packet.MAX_PAYLOAD_SIZE - tn);packet.setPayload(fbuf, tn + nread);p.write(packet);
// 전달받은 파일 데이터를 파일 전송 패킷으로 변환해 요청 피어에게 재전송msg = packet.getPayload().split("\t");packet.setType(TYPE_TRANSFER_FILE);packet.setOption((byte) 0);packet.setPayload(msg[1] + "\t" + msg[2] + "\t" + msg[3]);p.write(packet);
Y
N N
Y
![Page 15: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/15.jpg)
6. 데이터 흐름도 [Data Flow]
![Page 16: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/16.jpg)
6. 데이터 흐름도 [Data Flow]
Main.java
Listener 객체생성
Console 객체생성
PacketHandler.-java
Packet 헤더의종류 , 옵션 비교
패킷 처리 후결과 응답
Listener.java
클라이언트 소켓생성
Peer 객체생성
PeerManager 에추가
Peer.java
요청 대기
Packet 객체생성
PacketHandler 호출
START
END Peer
Console.-java
사용자 명령어 처리
사용자 명령어 입력
![Page 17: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/17.jpg)
6. 데이터 흐름도 [Data Flow] – Relay 전송 시퀀스
Peer A Server Peer B Peer C
파일 요청
인증코드 요청
인증코드 전송인증코드 , Peer A 주소 전송
인증코드 , 파일 전송
파일 전송
리더피어 ?
Yes
No 메시지 전송
![Page 18: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/18.jpg)
7. 시험 환경 및 결과 [Test Environment and Results]
![Page 19: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/19.jpg)
7. 시험 환경 및 결과 [Test Environment and Results]
Microsoft Windows7 Ultimate
JAVA DevelopmentKit 7u7
Public IP, 100MB LAN
Server Microsoft Windows
XP Professional x86
JAVA DevelopmentKit 7u7
Private IP, 100MB LAN
Peer2Microsoft WindowsXP Professional x86
JAVA DevelopmentKit 7u7
Public IP, 100MB LAN
Peer1
![Page 20: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/20.jpg)
7. 시험 환경 및 결과 [Test Environment and Results]
- Peer 1 의 테스트화면 -
![Page 21: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/21.jpg)
7. 시험 환경 및 결과 [Test Environment and Results]
- Peer 2 의 테스트화면 -
![Page 22: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/22.jpg)
7. 시험 환경 및 결과 [Test Environment and Results]
- Server 의 테스트화면 - - Server 의 로그내용 -
![Page 23: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/23.jpg)
8. 결론 및 개선 방안 [Conclusion]
![Page 24: 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도](https://reader031.vdocuments.mx/reader031/viewer/2022020714/568153ce550346895dc1c2fa/html5/thumbnails/24.jpg)
THANK YOU