java.io.StreamCorruptedException: invalid stream header: 6572726F
Development/Failure Log 2013. 4. 25. 17:47자바로 C언어로 구현된 서버와 소켓 통신을 하려던 중 다음과 같은 예외가 발생하였다.
java.io.StreamCorruptedException: invalid stream header: 6572726F
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
원인은 예외메시지가 보여주는 것처럼 스트림헤더가 유효하지 않기 때문이었다.
C언어 기반의 서버와 통신하기 위해서는 ObjectStream이 아닌 DataStream을 사용해야 하는데
습관적으로 ObjectOutputStream과 ObjectInputStream를 사용해서 발생한 문제였다.
이것은 왜냐하면 JAVA 기반과 C언어 기반이 소켓통신을 하기 위해서는 read와 write를 할 때 byte 타입으로 해 주어야 하기 때문이다.
다음은 C언어 기반의 서버에 소켓을 연결해서 한 번 메시지를 주고받는 JAVA 클라이언트의 예제 소스이다. 서버의 소스는 포함하지 않는다.
Example.java
import java.io.DataInputStream; import java.io.DataOutputStream; import java.net.InetSocketAddress; import java.net.Socket; public class Example { private static final String serverIP = "1.234.56.78"; // your serverIP private static final int portNum = 1234; // your port number private static final int buffersize = 100; private Socket mSocket = null; private DataOutputStream mObjOStream = null; private DataInputStream mObjIStream = null; public Example() { } public static void main(String args[]) { Example example = new Example(); example.connect(); } public void connect() { try { mSocket = new Socket(); mSocket.connect(new InetSocketAddress(serverIP, portNum)); mObjOStream = new DataOutputStream(mSocket.getOutputStream()); mObjIStream = new DataInputStream(mSocket.getInputStream()); System.out.println("connection successed"); byte[] out = new byte[buffersize]; String sendmgs = "kugistory.net"; // your sending message out = sendmgs.getBytes(); mObjOStream.write(out); mObjOStream.flush(); System.out.println("message sended: " + sendmgs); byte[] in = new byte[buffersize]; mObjIStream.read(in,0,in.length); String response = new String(in,0,in.length); // your receiving message response.trim(); System.out.println("response=" + response + "@end"); mSocket.close(); } catch ( Exception e ) { e.printStackTrace(); } } }
'Development > Failure Log' 카테고리의 다른 글
이클립스 안드로이드 라이브러리 및 프로젝트 속성 에러 (0) | 2013.06.13 |
---|---|
java.io.IOException: Prepare failed.: status=0x1 (0) | 2013.06.11 |
Android 재부팅 후 SharedPreferences가 초기화될 때 (0) | 2013.04.08 |
Eclipse ADT 설치 후 아이콘 및 메뉴가 안 보일 때 (8) | 2013.03.01 |
"\ndk-build.cmd": Launching failed (0) | 2013.01.01 |