마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

채팅만들어보고 있는데요 UDP통신할때 데이터가 짤리는데 동적으로 byte크기를 쓰고받을수있나요?

0 추천

DatagramSocket socket = new DatagramSocket();
                InetAddress address = InetAddress.getByName(DATA_DIC.UDP_IP);

                // 데이터가 저장될 공간으로 byte배열을 생성한다.
                byte[] msg = new byte[1024];
                byte[] msg2 = new byte[1024];
                if (sendMSG != null) {
                    msg = sendMSG.getBytes();
                } else {
                    msg = null;
                }

                while (true) {

                    if (msg != null) {
                        DatagramPacket packet = new DatagramPacket(msg, msg.length, address, DATA_DIC.UDP_PORT);
                        Log.d(tag, "서버로 전송중...");
                        packet.setLength(msg.length);
                        socket.send(packet); // 전송
                        sendMSG = null;
                        msg = null;
                    }

                    DatagramPacket packet1 = new DatagramPacket(msg2, msg2.length);
                    packet1.setLength(msg2.length);
                    socket.receive(packet1); // 수신
                    DATA_DIC.receiveMSG = new String(packet1.getData());
                    System.out.println("current server time : '" + new String(packet1.getData()) + "'");

                    msg2 = new byte[1024];

이런식으로 되어있는데요 줄때는 이상이 ㅇ없는데 받을때는 길게 받으면 마지막글자가 깨지고 덜받더라구요 
ㅠㅠ  new byte[1024] 이렇게 말고 주는만큼 크기 잡아주고 받는만큼 크기 잡아주는 방법이있을까요?
윤슈슈슈 (3,030 포인트) 님이 2015년 11월 19일 질문

1개의 답변

0 추천

byte[] msg = new byte[sendMSG.getBytes().length]; 

하시면 되지않나요?

라쎄린드 (25,460 포인트) 님이 2015년 11월 19일 답변
ㅠㅠ 그게 snedMSG는 클라이언트가 서버로 보낼때라 문제가 안되는데요
받을때는 DatagramPacket packet1 = new DatagramPacket(msg2, msg2.length)
socket.receive(packet1);  
여기서 msg2로 바로들어오는데 왜 msg2.length가 처음에 정한 바이트 크기만큼만 들어오는지 모르겠어요 ㅠㅠ
...