반응형

자바(JAVA) 실습 - TCP 전문 통신 (fixed length) - readInt, writeInt 활용 (1)

 

환경 OpenJDK 1.8

 

FixedData

1. Client가 전송하는 전문의 형태를 지정

2. 배열로 각 전문의 키와 값을 지정

3. 기타 정보 저장

 

ReceivedLinkedMapData

1. 전문을 LinkedMap 형태로 저장

2. 전문의 항목을 키와 값으로 저장

 

ReceivedMapDataGlobal

1. LinkedMap 형태의 전체 전문을 키(ex. global id)에 매핑하여 저장

 

Server

1. 전문의 첫 4byte에 전문의 전체 길이 읽기 (readInt)

2. 전문 읽기 (read)

3. 전문 내용 확인 및 특정 키에 저장

4. 전문 확인 후 조합한 메세지를 client에게 전송 (writeInt, write)

5. 전송 후 대기

 

Client

1. 전문의 첫 4byte에 전문의 전체 길이 (writeInt)

2. 메세지 전송 (write)

3. 전문을 Server에 전송

4. 응답 메세지 읽기 (readInt, read)

5. 메세지 표시 후 종료

 

 

FixedData - 고정값 저장소 지정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class FixedData {
    
    public final int ifid = 12;        // interface id
    public final int rqsy = 6;        // request system
    public final int glid = 32;        // global id
    public final int iqid = 8;      // inquiry id
    public final int stdt = 8;      // start date
    public final int endt = 8;      // end date
 
    public String ifid_str = "Interface Id";
    public String rqsy_str = "Request Sys";
    public String glid_str = "Global Id";
    public String iqid_str = "Inquiry Id";
    public String stdt_str = "Start Date";
    public String endt_str = "End Date";
 
    public byte[] firsByte = new byte[0];
    public byte[] ifidByte = new byte[ifid];
    public byte[] rqsyByte = new byte[rqsy];
    public byte[] glidByte = new byte[glid];
    public byte[] iqidByte = new byte[iqid];
    public byte[] stdtByte = new byte[stdt];
    public byte[] endtByte = new byte[endt];
 
    public int[] arrayId = { 0, ifid, rqsy, glid, iqid, stdt, endt };
    public String[] arrayStr = { "", ifid_str, rqsy_str, glid_str, iqid_str, stdt_str, endt_str };
    public byte[] arrayByte[] = { firsByte, ifidByte, rqsyByte, glidByte, iqidByte, stdtByte, endtByte };
    public String[] arrayKey = { """ifid_str""rqsy_str""glid_str""iqid_str""stdt_str""endt_str" };
    
}

 

 

ReceivedLinkedMapData - 전문을 LinkedMap 형태로 저장

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.LinkedHashMap;
 
public class ReceivedLinkedMapData {
    
    LinkedHashMap<StringString> receivedLinkedHashMap;
 
    public LinkedHashMap<StringString> getReceivedLinkedHashMap() {
        return receivedLinkedHashMap;
    }
    public void setReceivedLinkedHashMap(LinkedHashMap<StringString> receivedLinkedHashMap) {
        this.receivedLinkedHashMap = receivedLinkedHashMap;
    }
    @Override
    public String toString() {
        return "ReceivedLinkedMapData [receivedLinkedHashMap=" + receivedLinkedHashMap + "]";
    }
 
}

 

 

ReceivedMapDataGlobal - LinkedMap 형태의 데이터를 키값 (ex. global id)에 매핑하여 저장

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.HashMap;
 
public class ReceivedMapDataGlobal {
    
    static HashMap<String, ReceivedLinkedMapData> receivedMapDataGlobal;
    
    public static HashMap<String, ReceivedLinkedMapData> getReceivedMapDataGlobal() {
        return receivedMapDataGlobal;
    }
    public static void setReceivedMapDataGlobal(HashMap<String, ReceivedLinkedMapData> receivedMapDataGlobal) {
        ReceivedMapDataGlobal.receivedMapDataGlobal = receivedMapDataGlobal;
    }
    @Override
    public String toString() {
        return "ReceivedMapDataGlobal [receivedMapDataGlobal=" + receivedMapDataGlobal + "]";
    }
    
}

 

 

반응형