FlyHigh
199
2018-08-07 14:42:31
2
368

자바로 소켓통신중입니다.


클라이언트에서

data를 전송하는데 byte로 전송합니다.

클라에서 데이터 전송시 데이터 길면 데이터를 잘라서 보냅니다.


서버에서 이런 클라 데이터를 받아서 처리할려면 어떻게 로직을 구성해야되나요?

제가 로직한데로는 아래와 같습니다.

클라가 데이터를 2번 보낼경우 처음보낸 데이터만 받게되는데; 두번째 보낸 데이터는 어떻게 받아야되나요?


server = new ServerSocket();

server.bind(new InetSocketAddress("IP", Port)); // 연결을 기다리고

System.out.println("Wating Connect ..");

while (true) {

Socket sock = server.accept(); //클라가 접속할수 있는 소켓반환

InetAddress inetaddr = sock.getInetAddress();

System.out.println(inetaddr.getHostAddress() + " 로부터 연결요청이 들어옴.");

byte[] bytes = null;

String message = null;

InputStream is = sock.getInputStream();

bytes = new byte[50000];

int readByteCount = is.read(bytes);

System.out.println(readByteCount);

String line = null;

line = byteArrayToHexString(bytes); // byte to HEXString 구현한것.

                          }

0
0
  • 답변 2

  • action
    2k
    2018-08-07 15:00:45

    서버에서 이런 클라 데이터를 받아서 처리할려면 어떻게 로직을 구성해야되나요?

    -> 데이터의 시작 헤더값+전체패킷 길이 서버에서 데이터를 읽게되면 전체길이가

    올때까지 들어온 값들을 버퍼에 담아놓습니다.

    헤더부터 전체 패킷길이까지 정상적으로 인식했으면 전체패킷까지 읽어들입니다.

    해당부분을 처리하고 버퍼에서 처리한 부분을 제거 합니다.

    길이는 맞더라도 패킷내용에 값이 잘못된정보라면 해당정보를 재요청하거나 버립니다.


    제가 로직한데로는 아래와 같습니다.

    클라가 데이터를 2번 보낼경우 처음보낸 데이터만 받게되는데; 두번째 보낸 데이터는 어떻게 받아야되나요?

    -> 소켓이 연결된 상태에서라면 위에처럼 패킷을 계속 읽어들이면서 처리 하시면 됩니다.


    java socket server example 등으로 검색하셔서 threadpool등을 사용한 코드등을 참고하시면 좋습니다.

    0
  • FlyHigh
    199
    2018-08-07 15:03:16

    답변 감사합니다.

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.