24
1. 전전 전전전 전전전 2. 전전전전 3. 전전전 전전전 4. 전전 전전 전 전전전 전전 5. 전전전전 전 전전 전전 6. 전전전 전전전 7. 전전 전전 전 전전 8. 전전 전 전전 전전 INDEX

1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조 5. 알고리즘 및 구현 코드 6. 데이터 흐름도

  • Upload
    herbst

  • View
    82

  • Download
    3

Embed Size (px)

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 Presentation

Citation preview

Page 1: 1.  전체 시스템 구성도 2.  개발환경 3.  사용자 명령어 4.  패킷  구조 및 데이터 구조 5.  알고리즘 및 구현 코드 6.  데이터 흐름도

1. 전체 시스템 구성도

2. 개발환경

3. 사용자 명령어

4. 패킷 구조 및 데이터 구조

5. 알고리즘 및 구현 코드

6. 데이터 흐름도

7. 시험 환경 및 결과

8. 결론 및 개선 방안

INDEX

Page 2: 1.  전체 시스템 구성도 2.  개발환경 3.  사용자 명령어 4.  패킷  구조 및 데이터 구조 5.  알고리즘 및 구현 코드 6.  데이터 흐름도

1. 전체 시스템 구성도 [System Architecure]

Page 3: 1.  전체 시스템 구성도 2.  개발환경 3.  사용자 명령어 4.  패킷  구조 및 데이터 구조 5.  알고리즘 및 구현 코드 6.  데이터 흐름도

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.  데이터 흐름도

2. 개발환경 [Develodment Environment]

Page 5: 1.  전체 시스템 구성도 2.  개발환경 3.  사용자 명령어 4.  패킷  구조 및 데이터 구조 5.  알고리즘 및 구현 코드 6.  데이터 흐름도

2. 개발환경 [Development Environment]

그래픽 사용자 인터페이스윈도우

객체 지향 프로그램자바

Page 6: 1.  전체 시스템 구성도 2.  개발환경 3.  사용자 명령어 4.  패킷  구조 및 데이터 구조 5.  알고리즘 및 구현 코드 6.  데이터 흐름도

3. 사용자 명령어 [User Commands]

Page 7: 1.  전체 시스템 구성도 2.  개발환경 3.  사용자 명령어 4.  패킷  구조 및 데이터 구조 5.  알고리즘 및 구현 코드 6.  데이터 흐름도

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.  데이터 흐름도

4. 패킷 및 데이터 구조 [Packet and Data Structures]

Page 9: 1.  전체 시스템 구성도 2.  개발환경 3.  사용자 명령어 4.  패킷  구조 및 데이터 구조 5.  알고리즘 및 구현 코드 6.  데이터 흐름도

4. 패킷 및 데이터 구조 [Packet and Data Structures]

패킷에 따라동작을 지정하거나처리 결과로 사용할

패킷의 데이터의길이를 표현

패킷의 종류 ,

종류에 따라번호를 매겨 사용

packet_type

packet_option

data_length

1byte

1byte

4byte

서버에 전달할메시지의 내용

data

Page 10: 1.  전체 시스템 구성도 2.  개발환경 3.  사용자 명령어 4.  패킷  구조 및 데이터 구조 5.  알고리즘 및 구현 코드 6.  데이터 흐름도

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.  데이터 흐름도

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.  데이터 흐름도

5. 알고리즘 및 구현코드 [Algorithms and Codes]

Page 13: 1.  전체 시스템 구성도 2.  개발환경 3.  사용자 명령어 4.  패킷  구조 및 데이터 구조 5.  알고리즘 및 구현 코드 6.  데이터 흐름도

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.  데이터 흐름도

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.  데이터 흐름도

6. 데이터 흐름도 [Data Flow]

Page 16: 1.  전체 시스템 구성도 2.  개발환경 3.  사용자 명령어 4.  패킷  구조 및 데이터 구조 5.  알고리즘 및 구현 코드 6.  데이터 흐름도

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.  데이터 흐름도

6. 데이터 흐름도 [Data Flow] – Relay 전송 시퀀스

Peer A Server Peer B Peer C

파일 요청

인증코드 요청

인증코드 전송인증코드 , Peer A 주소 전송

인증코드 , 파일 전송

파일 전송

리더피어 ?

Yes

No 메시지 전송

Page 18: 1.  전체 시스템 구성도 2.  개발환경 3.  사용자 명령어 4.  패킷  구조 및 데이터 구조 5.  알고리즘 및 구현 코드 6.  데이터 흐름도

7. 시험 환경 및 결과 [Test Environment and Results]

Page 19: 1.  전체 시스템 구성도 2.  개발환경 3.  사용자 명령어 4.  패킷  구조 및 데이터 구조 5.  알고리즘 및 구현 코드 6.  데이터 흐름도

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.  데이터 흐름도

7. 시험 환경 및 결과 [Test Environment and Results]

- Peer 1 의 테스트화면 -

Page 21: 1.  전체 시스템 구성도 2.  개발환경 3.  사용자 명령어 4.  패킷  구조 및 데이터 구조 5.  알고리즘 및 구현 코드 6.  데이터 흐름도

7. 시험 환경 및 결과 [Test Environment and Results]

- Peer 2 의 테스트화면 -

Page 22: 1.  전체 시스템 구성도 2.  개발환경 3.  사용자 명령어 4.  패킷  구조 및 데이터 구조 5.  알고리즘 및 구현 코드 6.  데이터 흐름도

7. 시험 환경 및 결과 [Test Environment and Results]

- Server 의 테스트화면 - - Server 의 로그내용 -

Page 23: 1.  전체 시스템 구성도 2.  개발환경 3.  사용자 명령어 4.  패킷  구조 및 데이터 구조 5.  알고리즘 및 구현 코드 6.  데이터 흐름도

8. 결론 및 개선 방안 [Conclusion]

Page 24: 1.  전체 시스템 구성도 2.  개발환경 3.  사용자 명령어 4.  패킷  구조 및 데이터 구조 5.  알고리즘 및 구현 코드 6.  데이터 흐름도

THANK YOU