이해가 안되는게 하나 있는데.
클라이언트하고 서버하고 서로 TCP/IP로 통신을 하는 프로그램을 현재 작성하고 있어.
물론 클라이언트하고 서버하고는 메시지를 주고 받는데 있어서 단발성 메시지는 문제가 없어.
하지만 짧은 순간에 연속적으로 보내지는 데이터들은 전부 씹힌단 말야(...);
구성도 매우 간단해.
서버
DataInputStream recvBuff = new DataInputStream(
recvControllSock.getInputStream());
recvBuff.read(recvData);
클라이언트
public void sendUserData(final byte[] sendToData) {
DataOutputStream outData = new DataOutputStream(this
.getSocket().getOutputStream());
outData.write(sendToData);
outData.flush();
이게 전부인데.
대체 연속성 메시지는 왜 값이 깨져서 나오는지 모르겠어.
심각하게 for( int i =0; i<10000000; i++); 와 같이 강제 딜레이를 주니까. 퍼포먼스는 먼나라로 가버려도 깨지지 않고 보내지거든.
대신 씹히는 자료가 많아... 퍼포먼스도 너무 많이 떨어지고.
이해가 안돼.. 내가 뭘 잘못한게 있는거야?
혹시 이거하고 관련해서 뭔가 떠오르는 횽들 없어?
지금 이거 가지고 2주간 고민중이야.
삽질을 해서 발견한 것이 몇가지 있는데.
가장 눈에 띄는 것은 <<서버와 클라이언트가 같은 사이즈의 버퍼로 데이터를 전송 및 수신을 할시에 데이터가 상당히 안정적으로 전 수신됨!>>
하지만 이게 다양한 사이즈의 byte[] 형의 자료를 제일 앞에있는 헤더를 통해 종류별로 사이즈로 읽어오는 거라서.
클라이언트하고 서버의 버퍼가 항상 똑같이 프로그래밍을 한다는게 말이 안되는 것 같아서.
지금 제가 뭔가 알지 못하는 실수를 한 것 같은데 뭔지 모르겠음 ㅡ;
조언 좀 부탁해요 ㅡㅜ...
(레알 별짓을 다해본것 같다, 어디서 리시브쪽을 리셋해주라는 말을 듣고서 해봤는데 꿈쩍도 안하고 ㅡ; 논블럭킹으로 구현할까 했는데,
동기화가 필요한 프로그램에 논블럭킹으로 한다는게 많이 거부감이 있고, 또 실수가 있다면 계속 반복할 것 같아서 알고 싶은데 답이 안보여 ㅡ;)
PS : 자료가 깨진다는 걸, 자세히 살펴봤는데 0001 0001 을 날린다하면, 이게 0010 0010 처럼 좌측으로 쉬프트 연산한 것처럼 도착함 ㅡㅡ...
가장 의심가는 건, 데이터가 채 전송이 완료되기 전에 재전송이 시도된다... 쯤인데... 이게 말이 되나 ㅡ;
이런슈발 ㅡㅡ.. 찾았다.
자바 버퍼라는게 짧은 시간 동안 보내면, 각각의 자료를 분리하지 않고 남은 버퍼에 전부 때려넣는 구나 ㅡ;
쓰레드 만들어넣고 돌려여 슉슉