자바 소켓 바이트 통신 중, 값이 제대로 전달이 안됩니다.

바이트 통신 중, 값을 제대로 받아오지 못하는 것인지 값이 제대로 전달이 안되는 것인지.. 알 수 없는 문제가 발생하였습니다.

아래는 클라이언트 소스코드입니다.

            Socket soc = new Socket("127.0.0.1", 7824);

            InputStream is = new BufferedInputStream(soc.getInputStream());
            BufferedOutputStream os = new BufferedOutputStream(soc.getOutputStream());

            os.write(("asff").getBytes());
            os.flush();

            os.write(("f12312").getBytes());
            os.flush();

            System.out.println("소켓 오픈.");

아래는 서버 소스코드의 일부분 입니다.

                in = socket.getInputStream();
                out = socket.getOutputStream();

                handler = new PacketHandler(socket, in, out);
    private BufferedInputStream in;
    private BufferedOutputStream out;

    public PacketHandler(Socket soc, InputStream in, OutputStream out) {
        this.soc = soc;
        this.in = new BufferedInputStream(in);
        this.out = new BufferedOutputStream(out);
    }
    public synchronized byte[] readPacket() {
        byte[] packet = null;
        try {
            System.out.println(in.available());
            packet = new byte[in.available()];
            for (int pos = 0; pos < in.available(); pos++) {
                packet[pos] = (byte) (in.read());
            }
        } catch (IOException e) {
        }
        return packet;
    }

아래는 문제의 사진입니다.

alt text

이런 식의 통신은 처음이라, 어떻게 처리해야 좋을지 모르겠습니다..

귀한 시간 내주셔서 감사합니다.

  • 서버코드 일부로는 문제를 파악하기가 어려운데요. 간단한 거면 서버 내용을 다 보여주시면 좋을 듯합니다. 유연수 2016.2.19 02:13
  • 이메일 알려주실 수 있으십니까? o11o 2016.2.20 20:10
  • 서버측에 in.available()과 read() 메소드때문으로 보입니다.코드를 다 올려주지 않아서 답변이 맞지않을수 있습니다만, in.available()을 한번만 받아서 변수로 할당하면 어떨까요? 그리고 read()함수 또한 DataInputStream의 readFully() 함수를 사용해보세요. 참고 URL: http://stackoverflow.com/questions/25897627/datainputstream-read-vs-datainputstream-readfully SuperMarioChoi 2016.2.21 13:18
  • 아 또한 이러한 경우에 그냥 junit 테스트코드를 작성하시면 더욱 좋을것 같습니다. SuperMarioChoi 2016.2.21 13:20
  • SuperMarioChoi / 정말 감사합니다. o11o 2016.2.23 05:54

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    간단한 TCP/IP 통신 예제 입니다.

    서버

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.BufferedReader;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class TcpIpServer{
    
        public static void main(String[] args){
            ServerSocket ss;
            Socket sc;
    
            BufferedReader in;
            PrintWriter out;
    
    
            try{
                ss= new ServerSocket(6666);
    
                sc= ss.accept();
                System.out.println(sc.getInetAddress()+"와 연결되었습니다.");
    
                in = new BufferedReader(new InputStreamReader(sc.getInputStream()));
                out = new PrintWriter(sc.getOutputStream(),true);
                String inLine = "bcbcbcb";
                System.out.println("수신 : " + inLine);
                out.println(inLine);
                System.out.println("송신:"+inLine);
    
                in.close();
                out.close();
                sc.close();
                ss.close();
            }catch(IOException ex){
                ex.printStackTrace();
            }
        }
    }
    

    클라이언트

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.BufferedReader;
    import java.io.DataInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.Socket;
    
    
    public class TcpIpClient {
       public static void main(String[] args) {
           Socket sc;
           BufferedReader in;
           PrintWriter out;
           String outLine = "aaaaaa";
           String inLine = null;
           String host="127.0.0.1";
    
           try{
               sc=new Socket(host,6666);
               out=new PrintWriter(sc.getOutputStream(),true);
               in = new BufferedReader(new InputStreamReader(sc.getInputStream()));
               System.out.println("송신:"+outLine);
               inLine="adbfdaba";
               System.out.println("수신:"+inLine);
               in.close();
               out.close();
               sc.close();
           }catch(IOException ex){
               ex.printStackTrace();
           }
        }
    }
    
    • 질문자의 질문 내용과는 거리가 많아 보이는 코드네요 ㅡ 이영옥 2016.10.8 17:48

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.