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


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

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

            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년 02월 18일에 작성됨

  • 서버코드 일부로는 문제를 파악하기가 어려운데요. 간단한 거면 서버 내용을 다 보여주시면 좋을 듯합니다.    Carlos Yoo   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     
조회수 982


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년 02월 22일에 작성됨

  • 질문자의 질문 내용과는 거리가 많아 보이는 코드네요 ㅡ    이영옥   2016.10.8 17:48     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close