자바와 c간의 통신에 대해 질문 드립니다!~ (소스 모두 첨부)
뿡뿡몬
다음 통신 프로그램을 이용해서 자바와 C간에 채팅도 원할히 이루어지고(약간 불안전한 면은 있지만...) 이제 자바와 C간에 파일을 전송해야 하는데... 통신분석기나 C파일을 통해서 보니까 요놈이 파일인지 메세지인지를 구분 못해서 그냥 파일 이름명이랑 그 뒤로 파일안에 내용들을 채팅창으로 출력이 쫘악 되버리더군요...
이 문제를 해결하기 위해서 채팅포트를 7777, 파일전송은 포트를 7778번으로 각각 설정해서 따로따로 붙게끔 설정하니까 자바와 C끼리도 통신할때 파일전송을 누르면 소켓에 붙는데까지는 성공했지만 파일이름을 찾을수 없다는 에러가 뜨거나 그냥 프로그램이 꺼져버립니다....
참고로 자바에서 C로 파일을 보내는 부분에 대한 소스만 추려서 쓴다면
try{
/* 소켓으로부터 OutputStream 얻어서 파일명을 먼저 보냄 */
/* 서버측에서 파일 객체 생성시 이용할 것임 */
// Socket s=new Socket(ip, portn+1);
ip=iptext.getText();
Socket s=new Socket(ip, portn+1);
System.out.println(ip값은 + ip +port값은+(portn+1));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
System.out.println(파일명 : +file);
bw.write(file+\n);
bw.flush();
System.out.println(파일이름 전송);
/* 선택한 파일로 부터 스트림을 읽어들여서 얻어놓은 OutputStream에 연결 */
DataInputStream dis=new DataInputStream(new FileInputStream(new File(jlb.getText())));
DataOutputStream dos=new DataOutputStream(s.getOutputStream());
System.out.println(파일 내용 전송위한 빨대);
/* 바이트단위로 읽어서 스트림으로 쓰기 */
int b=0;
System.out.println(파일 전송 직전);
System.out.println(dis.read());
while( (b=dis.read()) != -1 ){
dos.write(b);
dos.flush();
}
System.out.println(다 보냈음);
/* 자원정리 */
dis.close(); dos.close(); s.close();
dis=null; dos=null; s=null;
// System.exit(1);
}
catch(Exception e){
System.out.println(e);
}
}
요렇게 했습니다. 이걸 일단 버퍼로 해서 파일 전송 속도를 좀 높이고 싶은데 어떤식으로 해야할까요? 참고로 인터넷에 찾아보니까 write대신에 writeByte로 하면 자바와 C간에 통신을 할수 없다고 해서 write로 바꾼거거든요. 좀더 조언해주셨으면 감사하겠습니다. 그리고 파일명과 파일을 자바와 C간에 통신할때 구분짓는 방법도 없을련지...