Socket sc = new Socket(HOST, PORT);
OutputStream out = sc.getOutputStream();
InputStream in = sc.getInputStream();
// 출력 스트림
PrintWriter pw = new PrintWriter(new OutputStreamWriter(out));
// 입력 스트림
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = "zzz";
// 문자 입력 스트림
StringReader input = new StringReader(line);
// 버퍼 설정
char[] buf = new char[1024];
// 상태 받음
int len;
// 버퍼 길이만큼 전송
while ((len = input.read(buf)) != -1) {
pw.write(buf, 0, len);
pw.flush();
System.out.println("전송중");
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//////// 여기를 주석 처리하면 서버에서 잘 받거든요....
///////서버에서는 받아서 디비의 값 불러와서 다시 뿌려주구요
// 데이터 담기
StringWriter writer = new StringWriter();
System.out.println("받아온 값");
while ((len = br.read(buf)) != -1) {
System.out.println("보내는중");
writer.write(buf, 0, len);
}
writer.flush();
System.out.println("끝남");
System.out.println(writer.toString());
writer.close();
/////////////////////////////여기까지 주석하면 에러안남/////////////////////////////////////
input.close();
pw.close();
br.close();
sc.close();
위에 소스는 클라이언트 부분인데 서버로 전송하면 서버에서 다시 db의 값을 보내는거거든요..
print함수로 보내는건 되는데 전송진행상태 볼려고 write로 버퍼설정해서 보내려니 서버로 전송은되는데 받지를 못하네요???
저 위에 /////////// 부분 주석처리하면 잘 되거든요.. 저 부분이
데이터 보낸 후에 받는 부분인데.. 저부분이 있으니 서버에서도 받지를 못하네요??;;
받아야 보내는데 저부분이 잇으면 받지를 못해요..
왜그렇죠? 도와주세요 ㅠ




대충봐서는 정확히 어떤 상태인지 알수없지만
일단 보내고나서 받는거라면 다음과 같이 추론할 수 있겠습니다.
보내는 부분에서 블럭되어 리시브 루틴까지 못갔다.
혹은 서버에서 전송을 안해줘서 리시브루틴에서 블럭되었다.
즉, 블럭상태일 가능성이 큽니다.
네트워크 프로그래밍하실때는
보내는 함수와 받는 함수를 분리하신 후
반드시 쓰레드로 만드세요.
이벤트(메시징) 형식의 구조를 취해야합니다.
어떤경우에건 보내는 기능과 받는 기능이 한 함수에 몰려있는것은 최악의 결과를 초래합니다.