자바 소켓프로그래밍에 관한 질문입니다.
글쓴이: tyolee83 / 작성시간: 화, 2005/11/29 - 6:04오후
과제를 하다가 막히는 부분이 생기네요 ㅠㅠ
자바로 소켓 프로그래밍을 하다가 막힌건데요
우선 수업시간에 나름대로 프로토콜을 정해서 패킷을 전송하는 것입니다.
필드별로 1byte, 2byte, 4byte 등의 길이를 가져서
그것들을 각각 byte, short, int 등으로 선언했거든요
근데 이걸 하나의 패킷으로 생각해서 보내려면
C에서 구조체의 포인터를 넘기는거처럼
객체를 생성해서 보내고 싶은데 안되네요 ㅠㅠ
그래서 생각한게 필드별로 하나하나 보내는 건데
byte 하나 보내고 서버에서 readByte 이렇게 받고
short 하나 보내고 서버에서 readShort 이렇게 받고
하다보니까 코드가 말이 안되는... ㅠㅠ
결과적으로 패킷화 하는 걸 어떻게 처리해야 할까 하는거랑요
소켓을 통해 서버 클라이언트가 통신할때
패킷 단위로 보내고 그걸 다시 파싱하고 그런쪽을 어떻게 처리해야 할지
조언을 듣고 싶습니다.
답변에 미리 감사드립니다.
Forums:
객체 전송 가능합니다.ObjectOutputStream,Objec
객체 전송 가능합니다.
ObjectOutputStream,
ObjectInputStream
써보세요.
implements java.io.Seraialze해 주시고요.
과자가 아닙니다.
cuckoo dozen, 즉.12마리의 뻐꾸기란 뜻입니다.
Serialize 를 통한 객체의 전송
처음으로 KLDP 에 글을 써 봅니다 :)
이미 간략히 해결책을 알려 주신 분도 계시지만, 일단 기억나는 만큼 써 봅니다. (접속이 제한된 곳이라 제가 쓰던 코드를 꺼내 올 수가 없군요)
자바에서는 클래스 정의를 통해 생성된 임의의 객체 (instance 라고도 부르더군요) 를 특정 스트림으로 전송할 수 있습니다. 파일 스트림으로 보내면 객체를 디스크에 그대로 쓰거나 읽을 수 있고 네트워크 스트림으로 보내면 다른 컴퓨터로 전송할 수 있는 것입니다. 이를 위해 사용하는 것이 ObjectInputStream, ObjectOutputStream 클래스이며, 하나 더 필요한 인터페이스가 Serializable 입니다 (제 기억으로는 Serialize 가 아니라 Serializable 인 것 같네요) 모두 java.io 패키지 아래에 있을 겁니다.
대략 예를 들어
이런 클래스가 있다고 합시다.
이걸 네트워크 전송하기 위해서는
소켓 받고, 소켓의 output stream 을 얻고, ObjectOutputStream 인스턴스를 생성한 후 writeObject() 메소드를 통해 전송합니다.
이것을 받으려면 비슷한 과정을 거칩니다.
소켓 받고, input stream 얻고,
ObjectInputStream 인스턴스 생성 후 ReadObject() 메소드를 통해 얻습니다.
보내기
받기
대충 이 정도가 될 겁니다.
답변 감사드립니다.
이거때매 많이 고생했는데
너무 반가운 답변입니다
우선 시도해 봐야겠네요
답변 감사드립니다 ^^
//TODO
이런식으로 짜봤는데 에러가 나네요 ㅠㅠ
java.io.NotSerializableException:
이런 예외가 발생되는데
이유는 무엇일까요? ㅠㅠ
못찾겠는데 ㅠㅠ
//TODO
Serializable interface implement 하셨나요?
Serializable interface implement 하셨나요?
오늘 우리는 동지를 땅에 묻었습니다. 그러나 땅은 이제 우리들의 것입니다.
아직도 우리의 적은 강합니다. 그러나 우리는 그들보다 많습니다.
항상 많을 것입니다.
답변 감사합니다. 그런데 또 에러가... ㅠㅠ
윗분 말씀대로 Class MyPacket implements Serializable
이걸 붙이니까
이번엔 저렇게 다른 예외가 많이.... ㅠㅠ
근데 보내는 클라이언트에선 에러가 안나고
받는 서버쪽에서 난 에러거든요....
조언부탁드립니다. ㅠ
//TODO
에러는 이것 하나 입니다. 나머지는 프로그램이 수행될 때 호출되는 클래스
에러는 이것 하나 입니다. 나머지는 프로그램이 수행될 때 호출되는 클래스의 어떤 method를 거치는가를 보여주는 겁니다.
Client_Packet 클래스가 없다는 것이니 대신에 MyPacket을 쓰면 되겠네요. 클라이언트에서 보내는 것이 이상이 없으면, 서버에서 받아서 풀 때도 클라이언트에서 정의된 같은 것이 있어야 풀리겠죠.
----
I paint objects as I think them, not as I see them.
atie's minipage
댓글 달기