socket 프로그램중입니다.
숙제루 단순한 미니ftp같은 플그램을 작성했습니다.
프로그램은 잘 돌아가는데 open() read() write()를 사용한
서버와 클라이언트간의 파일 교환에 있어서 아직 개념이 낯설어서
이 초보에게 개념 설명점 명확히 할수있도록 갈쳐주세요
어떤 객체가 존재하면, 그 객체와 프로그램 사이에는
input과 output의 정보교환이 가능할수 있습니다.
C프로그램에서 이 객체들은 하나같이 pointer를 사용합니다. 이해하기 쉬운 예를 들어 file pointer라고 하면, 이 file pointer를 이용하여 fwrite와 fread를 할수 있겠죠...
file이 아니라도, 디스크립터(스펠링이 순간 떠오르지 않음-,-;;)라면 무엇이든 input과 output이 존재하게 됩니다. (물론 읽기/쓰기 권한이 있다고 가정하고요..)
socket도 마찬가지입니다. 다만 socket은 local 시스템의 디스크립터가 아닐 뿐이죠...
FTP의 예를 들어 local에서 외부로 파일을 전송한다면, TCP 프로토콜상에는 send가 되겠지만, socket의 포인터를 알고 있다면, write를 이용해서 send가 가능합니다. recv의 경우는 read로 가능하겠죠... TCP/IP 프로토콜 구조상 한쪽에서 1024바이트를 보내면, 받는 쪽에서도 정확히 1024를 받겠끔 코딩되어야 합니다.
그래서 헤더의 사이즈(8~16바이트)를 정하고 헤더안의 사이즈 정보를 이용하여, 정확히 해당사이즈만큼 받고, 보낼수 있게 표준화하면 코딩이 편하겠죠...
TCP/IP 프로토콜을 open/write/read/close로 직접 코딩해본적은 없지만... fopen/fwrite/fread/fclose대신 코딩해본 경험으로 보자면....
물론 socket 은 잘 생성된후 서버와의 connection까지 한 상태에서 read/write를 해야겠죠...(흠.. 좀 찾아봐야겠지만 여기서 open은 그저 생성된 socket을 열기만 하는 역할을 하지 않을까 하는 생각이.. 문득... )
더 이상 간단한것은 없을것 같은데구체적으로 무엇이 궁금한가요?
더 이상 간단한것은 없을것 같은데
구체적으로 무엇이 궁금한가요?
http://publib.boulder.ibm.com/iseries/v5r1/ic2924/index.htm?info/rzab6/rzab6connectionor.htm
울랄라~ 호기심 천국~!!
http://www.ezdoum.com
UNIX, LINUX시스템에서 어떤 파일에 대해서 열고, 일고 쓰는 동작
UNIX, LINUX시스템에서 어떤 파일에 대해서 열고, 일고 쓰는 동작은 , open(), read(), write() 함수를 통해 이루어 집니다. 위 3개의 함수에 대해서 좀더 자세한 사항을 알고 싶으면, man 2 xxx 해보시면 됩니다.
그리고, UNIX, LINUX의 모든(혹은 대부분?)기기들은 파일로서 간주 됩니다. 디스크드라이브상의 파일에 기록하는 것이나, 네트웍 파일에 기록하는 것이나 개념은 같다는 이야기지요. 물론 네트웍 쪽이 좀더 복잡한 처리 과정이 있을 수 있느나, 기본적으로는 같습니다.
>>>행복한 웃음<<<
어떤 객체가 존재하면, 그 객체와 프로그램 사이에는 input과 ou
어떤 객체가 존재하면, 그 객체와 프로그램 사이에는
input과 output의 정보교환이 가능할수 있습니다.
C프로그램에서 이 객체들은 하나같이 pointer를 사용합니다. 이해하기 쉬운 예를 들어 file pointer라고 하면, 이 file pointer를 이용하여 fwrite와 fread를 할수 있겠죠...
file이 아니라도, 디스크립터(스펠링이 순간 떠오르지 않음-,-;;)라면 무엇이든 input과 output이 존재하게 됩니다. (물론 읽기/쓰기 권한이 있다고 가정하고요..)
socket도 마찬가지입니다. 다만 socket은 local 시스템의 디스크립터가 아닐 뿐이죠...
FTP의 예를 들어 local에서 외부로 파일을 전송한다면, TCP 프로토콜상에는 send가 되겠지만, socket의 포인터를 알고 있다면, write를 이용해서 send가 가능합니다. recv의 경우는 read로 가능하겠죠... TCP/IP 프로토콜 구조상 한쪽에서 1024바이트를 보내면, 받는 쪽에서도 정확히 1024를 받겠끔 코딩되어야 합니다.
그래서 헤더의 사이즈(8~16바이트)를 정하고 헤더안의 사이즈 정보를 이용하여, 정확히 해당사이즈만큼 받고, 보낼수 있게 표준화하면 코딩이 편하겠죠...
TCP/IP 프로토콜을 open/write/read/close로 직접 코딩해본적은 없지만... fopen/fwrite/fread/fclose대신 코딩해본 경험으로 보자면....
물론 socket 은 잘 생성된후 서버와의 connection까지 한 상태에서 read/write를 해야겠죠...(흠.. 좀 찾아봐야겠지만 여기서 open은 그저 생성된 socket을 열기만 하는 역할을 하지 않을까 하는 생각이.. 문득... )
http://publib.boulder.ibm.com/iseries/v5r1/ic2924/index.htm?info/rzab6/rzab6connectionor.htm...
--> 이걸 찾아보니 send(), recv()대신에 write(), read()로 나와있고, open()대신에 connect()으로 나오는군요..
댓글 달기