HW7

HW7

-ApplicationLauncher-TCP/TCPApplicationLauncherServer/ApplicationLauncherServer.exe 실행

-TCP GUI Client 프로그램 작성 (Java 언어를 사용해서, app-menu.xml 파일을 읽어서, APP 개수만큼 토글 버튼 생성하고, 버튼을 누르면 해당 앱이 실행

-icons.zip 파일안에 이미지 있음

-제출: 소스코드 (반드시 주석처리 요망) 프로젝트 파일 전체 그리고 보고서를 묶어서 제출

app-menu.xml 파일 구조

<?xml version="1.0"?>
<APPLAUNCHER>
   <APP id="1001">
      <NAME>Notepad</NAME>
      <ICON>./icons/notepad.png</ICON>
      <APPLAUNCH_IP>127.0.0.1</APPLAUNCH_IP>
      <APPLAUNCH_PORT>32392</APPLAUNCH_PORT>
      <COMMAND>notepad.exe</COMMAND>
   </APP>
   <APP id="1002">
      <NAME>TCP Server</NAME>
      <ICON>./icons/tcp_server.png</ICON>
      <APPLAUNCH_IP>192.168.0.122</APPLAUNCH_IP>
      <APPLAUNCH_PORT>32392</APPLAUNCH_PORT>
      <COMMAND>D:\MM\courses\KyoungPark-DistributedMultimediaService2016\lab\CPPNetwork\TCP\server\Debug\TCPServerTest.exe 9001</COMMAND>
   </APP>
   <APP id="1003">
      <NAME>TCP Client</NAME>
      <ICON>./icons/tcp_client.png</ICON>
      <APPLAUNCH_IP>192.168.0.122</APPLAUNCH_IP>
      <APPLAUNCH_PORT>32392</APPLAUNCH_PORT>
      <COMMAND>D:\MM\courses\KyoungPark-DistributedMultimediaService2016\lab\CPPNetwork\TCP\client\Debug\TCPClientTest.exe 192.168.0.122 9001</COMMAND>
   </APP>
</APPLAUNCHER>

HW7 AppItemToggleButton 예시

public class AppItemToggleButton extends JToggleButton {
    int id;
    String name;
    String icon;
    String ip;
    int port;
    String command;

    public AppItemToggleButton(int id_) {
        id = id_;
        name = null;
        icon = null;
        ip = null;
        port = 0;
        command = null;
    }
// 중간생략..
}

Thread & Mutex

Thread src based on QUANTA lib

– main process와 thread에서 각각 local variable인 index를 출력함. thread는 순서대로 동작하지 않음.

MULTITHREAD

Thread with No Mutex src based on QUANTA lib

– threadFunc에서 mutex를 사용하지 않고 global variable인 count 를 증가하면서 출력을 했으므로, 정상적인 순서대로 동작하지 않음

thread-nomutex

Thread with Mutex src based on QUANTA lib

–  threadFunc에서 mutex를 사용하여 global variable 인 count  가 정상적으로 증가하면서 출력함

thread-mutex

 

 

 

Midterm

단국대학교 멀티미디어공학전공 분산멀티미디어서비스 (2016년 봄학기) 중간고사 프로그래밍

– 날짜: 2016년 4월 14일

– 제출일시: 2016년 4월 27일까지 이러닝으로 제출 & 2016년 4월 28일 수업시간에 보고서(주요코드 설명 및 실행결과 화면캡쳐) 제출

– 내용 : C++/Java Client/Server Program using Blocking TCP, UDP, Thread, FileIO

– 준비자료 :

WOEIDLIST
ThreadedTCPServerWOEIDDebug & tcpClientQuery
UDPServerWOEIDDebug & JavaUDPClientQuery

 

– 실습문제

  1. WOEID.csv 파일을 읽어서 WOEID의 리스트를 만든다. (10점)

-WOEID (World On Earth ID)는 야후에서 사용하는 위치정보이다.

-WOEID 클래스는 ID, CityName, CountryName, Latitude, Longitude 멤버를 갖고,

멤버 정보를 출력하는 print() 메소드를 갖는다.

-WOEIDList 클래스는 WOEID의 리스트를 멤버로 갖고,

파일을 로딩하는 load(filename), 도시이름으로 ID를 찾는 find(cityname, &woeid), 리스트 전체를 출력하는 print() 메소드를 갖는다.

 

  1. Thread와 Blocking TCP를 사용하여, 클라이언트에서 쿼리하는 CityName을 가지고 WOEID 정보를 클라이언트에 보내주는 서버 프로그램을 만든다. (30점)

-서버 실행파일은 ThreadedTCPServerWOEIDDebug.zip으로 제공함.

 

WOEIDList gList; // 전역변수 (서버프로그램 시작 시, 파일로딩해서 gList로 가짐)

void * ExecuteQueryThread(void *param) { // 스레드에서 클라이언트에서 쿼리한 데이터를 찾고, 정보를 찾았으면 클라이언트로 보내는 예시

// client->read(buffer, ….)

// if (gList.find(buffer, id)) sprintf(sendbuffer, “%d,%s,%s,%f,%f”, ….)

// else sprint(sendbuffer, “%s NOT FOUND”, buffer);

// client->write(sendbuffer, ….)

}

 

  1. ThreadedTCPServerTest로 접속하여, 도시이름으로 WOEID를 쿼리하는, Java 코드로 작성한, 클라이언트 프로그램을 만든다. (20점)

-힌트: JavaTCPClient를 사용해서 작성하면 됨.

– ThreadedTCPServerTest로 접속하여, 도시이름으로 WOEID를 쿼리하는, C++ 코드로 작성한, 클라이언트 프로그램 소스 코드 (tcpClientQuery.zip)는 제공함.

 

  1. UDP를 사용하여, 클라이언트에서 쿼리하는 CityName을 가지고 WOEID 정보를 클라이언트에 보내주는 서버 프로그램을 만든다. (20점)

-힌트: 작동원리는 TCP와 동일함.

-서버 실행파일은 UDPServerWOEIDDebug.zip으로 제공함.

 

  1. UDPServerTest로 접속하여, 도시이름으로 WOEID를 쿼리하는, C++ 코드로 작성한, 클라이언트 프로그램을 만든다. (20점)

-힌트: UDP의 client를 사용해서 작성하면 됨.

– UDPServerTest로 접속하여, 도시이름으로 WOEID를 쿼리하는, Java 코드로 작성한, 클라이언트 프로그램 소스코드 (JavaUDPClientQuery.zip)는 제공함.

 

  1. Java 코드로 작성한, 동일한 Threaded Blocking TCP 서버와 UDP 서버 프로그램 작성은 Extra Credit. (20점)

 

HW5

TCP (TCP Non-blocking) vs. ThreadedTCP (TCP Blocking & Thread)

UDP vs ThreadedUDP vs GUIThreadedUDP vs GUINonThreadedUDP

실행결과 및 코드 분석 리포트