INDEX 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조

Slides:



Advertisements
Similar presentations
All Rights Reserved, Copyright© UBIVELOX co.,Ltd LG U+ 과금 API 소개 Version1.0 Authorubivelox Date21-Feb
Advertisements

Wireless & Mobile Communication system LAB TinyOS 의 메시지 형식 및 자바 응용 프로그램들 조선대학교 정보통신공학과 변재영 본 자료는 한백전자 교육자료를 이용하여 제작되었음을 밝힙니다.
HTTPS Packet Capture Tutorial
목차 Contents 무선인터넷용 비밀번호 설정방법 Windows 7 Windows 8 Windows XP MAC OS.
네트워크 프로그래밍 및 실습.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
김태원 심재일 김상래 강신택. 김태원 심재일 김상래 강신택 인터넷 통신망의 정보를 제공하는 서비스 인터넷의 자원 및 정보는 NIC가 관리 IP주소 또는 도메인으로 정보 검색 이용자 및 통신망 관한 정보를 제공.
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
Chapter 6. 리눅스 백도어 황 선 환.
Ch.07-5 xml-rpc 사용하기 김상엽.
Network Lab. Young-Chul Hwang
제 09 장 데이터베이스와 MySQL 학기 인터넷비즈니스과 강 환수 교수.
PHP입문 Izayoi 김조흔.
Load Balancing L4와 L7은 어떻게 동작할까?.
2강. JAVA 프로그래밍이란?-II & 변수 JAVA 프로그램 환경설정과 실행 방법 변수란?
8장 자바 입출력.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
Lesson 6. 형변환.
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 7장 소켓 연결의 우아한 종료 인공지능실험실 석사 2학기 이희재
4-1장. MySQL 제13장.
DataScience Lab. 박사과정 김희찬 (월)
FTP 프로그램 채계화 박재은 박수민.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
제 19 장 TFTP 19.1 메시지 19.2 연결 19.3 데이터 전송 19.4 UTP 포트 19.5 TFTP 예제
Chapter 06. UDP 서버/클라이언트.
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 9장 소켓의 다양한 옵션 인공지능실험실 박사 1학기 장성만
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
NJM Messenger 박상원 박연호.
컴퓨터응용과학부 Java Enterprize(DB) 제 15 주
WinCE Device Driver 실습 #2
프로젝트 발표 순서 12/7(수), 팀 별 15분 발표순서 PPT (팀 별 이름, 구현 내용, 결과-그래프 포함) 각 기법당
13장 고급 입출력 함수 박사 4학기 최 성자.
TCP/IP Socket Programming…
10장. 예외처리.
Chapter 5 UDP Socket 소켓 프로그래밍.
웹 어플리케이션 보안 2016년 2학기 3. Mongo db.
WOL(Wake-On Lan) 컴퓨터공학과 4학년 박기웅.
I/O&socket통신 POWERPOINT & GROUP STUDY 한재희 김상훈 최기람 황인준 이어진.
Trivial File Transfer Protocol (TFTP)
시스템 인터페이스 Lab3 Unix 사용법 실습.
DataScience Lab. 박사과정 김희찬 (월)
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
RMI Messenger 지도 : 김정배 교수님 조봉진.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Internet 데이터 전송 목표: 인터넷의 개요 및 기본 내용을 살펴보고 VB에서의 데이터 전송 프로그래밍에 대하여 학습한다. 주요내용 인터넷의 개요 인터넷 데이터 전송 인터넷 프로그래밍 Winsock Client Server 프로그래밍.
오라클 넷(Oracle Net)의 개념 및 구성
컴퓨터공학실습(I) 3주 인공지능연구실.
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
자바로 만든 채팅 프로그램 임경진 조주경 지도교수님 : 이광세 교수님.
15강. 폼 데이터 값 검증 Validator를 이용한 검증 ValidationUtils 클래스
프로젝트 제안서 -TCP/IP를 이용한 메신저 구현-
웹(WWW).
12강. 컨트롤러 컨트롤러 클래스 제작 요청 처리 메소드 제작 뷰에 데이터 전달
자바 5.0 프로그래밍.
Chapter 04. TCP 서버/클라이언트.
세션에 대해 알아보고 HttpSession 에 대해 이해한다 세션 관리에 사용되는 요소들을 살펴본다
MIDP 네트워크 프로그래밍 ps lab 김윤경.
발표자 : 이지연 Programming Systems Lab.
다자간 채팅프로그램 김형도 허영민
채팅 및 파일전송 프로그램 권 경 곤 김 창 년.
BALENO MeSSENGER (BALENO-M) 메뉴얼.
Installation Guide.
Network Lab. Young-Chul Hwang
M.B.TEAM 중간 발표 (5.18) 이 제걸 백 인호.
Lady chatterley 윤형석 장홍현 조재범.
중간 결과 보고 ( Server & Client )
Presentation transcript:

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

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

1. 전체 시스템 구성도 [System Architecure] JAVA Runtime Environment 7u7 Microsoft Windows 7 Ultimate p2ppeer / p2pserver Console Listener Main packets Packet PacketHandler RelayManager peers Peer PeerManager sharing FileManager SharedFile

2. 개발환경 [Develodment Environment]

2. 개발환경 [Development Environment] 그래픽 사용자 인터페이스 윈도우 객체 지향 프로그램 자바

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

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 프로그램

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

4. 패킷 및 데이터 구조 [Packet and Data Structures] packet_type data_length 패킷의 종류, 종류에 따라 번호를 매겨 사용 패킷의 데이터의 길이를 표현 1byte 4byte packet_option data 패킷에 따라 동작을 지정하거나 처리 결과로 사용할 서버에 전달할 메시지의 내용

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 체크섬 }

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; // 피어 스레드 동작 컨트롤 }

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

5. 알고리즘 및 구현코드 [Algorithms and Codes] MD5 메시지 문자열로 변환 생성 각 바이트의 상하위 워드 분리 워드를 문자열로 재결합 Message 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

5. 알고리즘 및 구현코드 [Algorithms and Codes] // 서버에 릴레이 준비 알림 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); } Start 파일 없음 알림 요청 받은 파일 존재? N 리더피어? 홀펀칭 성공? N Y Y 서버에 릴레이 준비 알림 // 서버에서 응답받은 인증코드 저장 (릴레이 피어) 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); 파일 전송 End

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

6. 데이터 흐름도 [Data Flow] Main.java Listener.java Peer.java Console.java 생성 Console 객체 PacketHandler.java Packet 헤더의 종류, 옵션 비교 패킷 처리 후 결과 응답 Listener.java 클라이언트 소켓 Peer 객체 PeerManager에 추가 Peer.java 요청 대기 Packet 객체 PacketHandler 호출 START END Peer Console.java 사용자 명령어 처리 사용자 명령어 입력

6. 데이터 흐름도 [Data Flow] – Relay 전송 시퀀스 Peer A Server Peer B Peer C 파일 요청 인증코드 요청 인증코드 전송 인증코드, Peer A 주소 전송 인증코드, 파일 전송 파일 전송 리더피어? Yes No 메시지 전송

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

7. 시험 환경 및 결과 [Test Environment and Results] Microsoft Windows XP Professional x86 JAVA Development Kit 7u7 Public IP, 100MB LAN Peer1 Microsoft Windows 7 Ultimate JAVA Development Kit 7u7 Public IP, 100MB LAN Server Microsoft Windows XP Professional x86 JAVA Development Kit 7u7 Private IP, 100MB LAN Peer2

7. 시험 환경 및 결과 [Test Environment and Results] - Peer 1의 테스트화면 -

7. 시험 환경 및 결과 [Test Environment and Results] - Peer 2의 테스트화면 -

7. 시험 환경 및 결과 [Test Environment and Results] - Server의 테스트화면 - - Server의 로그내용 -

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