web과 소켓통신 연동하는 부분에서 문의드립니다.
계속 자료를 찿고 있는데.. 어떻게 해야할지 답답하여. 도움을 청합니다.
<<로그 참고 ] SAF로 시작하는 부분부터가 그림데이터 입니다.>>
[4번째 추가]::연결은 keep_alive로 하지 않고, close로 할것 입니다.
keep_alive로 하였더니 socket에서read의 리턴이 안되는 현상이 있더군요.
소켓연결이 끊겨지고, 그리고 read문이 리턴 되기 위해서는 close로 해야 할듯 합니다.. 맞죠??
지금 하려는 작업은FORM ENCTYPE="multipart/form-data" ACTION="http://xxx.xxx.xxx.xxx/send_pic.asp" METHOD="POST" name="form1">
에서 이미지를 첨부하여 보내구 , text결과를 웹으로 전달받으면 됩니다.
그래서 80포토로 접속하고, 이제 데이터를 만들어야 하는데..
가장 간단한 방법이라 생각되어, rfc문서를 읽고(외우지는 못했습니다)
Ethereal 프로그램을 사용해서 데이터 부분만 sprintf로 버퍼에 넘겨주면 되겠다 싶었습니다.
그런데.. 캡쳐 로그를 보는 순간.. 2군데 이해가 안되는 부분이 있습니다.
1 Content-Type: multipart/form-data; boundary=---------------------------7d42792f80470
여기서 boundary값이 데이터 값이 바뀌면 boundary값도 바뀌는 현상이 있습니다. 이 boundary의 값이 의미하는 것이 무엇인지요? 단어뜻 그대로 경계...음..
2 Content-Length: 3576 여기서 length는 body의 길이라고 알고 있습니다.
[code:1]Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ASPSESSIONIDGGGQGESY=LNDPBJPAFGHKGMILABBOBPDG
凄:@? ? ? 揆/?P?퉐 E 킍?
첨부 | 파일 크기 |
---|---|
qa_send_pic_0225.txt | 5.25 KB |
에구 질문을 두서 없이 올려서 그런가... 답변이 없네요.
에구.. 질문의 요지를 제대로 표현하지 못했나 보네요.
상황 설명을 하다보니..
요약하면 ethereal 프로그램으로 통신을 캡쳐하였구.
이 캡쳐 데이터를 바탕으로 sprintf, memcpy로 데이터 부분만 바꾸면 되겠다라는 생각이 들었습니다.
그런데 여기서 2가지 값 설정이 어디에서 나오는 값인지 유추가 되지 않았습니다.
1 .번재는 boundary 값이구.
2. length 값을 계산하기가.. 만만치 않더군요.
저는 파일을 업로드 하는 것인데. 당연이 이 업로드되는 파일크기는 미리 알수 있습니다. 다만 text필드에 들어가는 값이 가변이죠.
음.. 이 상황에서 조언을 부탁드립니다..
언제나 즐프를 꿈꾸며~
boundary 뒤에 나오는 값은 임의의 값입니다.보내는 사람이 랜덤
boundary 뒤에 나오는 값은 임의의 값입니다.
보내는 사람이 랜덤하게 값을 설정한후에 사용하시면 됩니다.
그리고 길이 값은, 어짜피 base64로 인코딩 된 상태이기 때문에 그냥 파일 사이즈를 읽어서는 안되고
post할 데이터를 다 만든다음 문자열 길이 함수로 읽으면 될것 같습니다. (post될 데이터에는 널이 없으므로)
덧붙이지만 post 데이터를 만들때 바꿔치지로는 한계가가 있으니, buffer 하나씩 그려나가는게 더 효과적일 겁니다.
울랄라~ 호기심 천국~!!
http://www.ezdoum.com
3바이트가 빠지는 것은 무었때문일까요?
지금 그림올려보내는 것은 아직 안되었지만...
말씀하신 boundry를 적용하여.
boundary=THIS_STRING_SEPARATES 이렇게 적용하였습니다.
그런데..
위의 예에서는 [123456789 ] 입력하면
echo값을 내려 받는데.. [123456789]
[123456789]<--- 3바이트 space+\n 을 넣지 않으면
서버에서 echo "origCTN[$origCTN]<br>"로 테스트 시에
[123456]으로 나옵니다.
[789]3바이트가 끊기는 것은 왜 일까요?
언제나 즐프를 꿈꾸며~
아직두 버벅대고 있네요..
음.. 아래처럼 하면 안된다는 말씀인지??
이런식으로 구성하였습니다.
1 :text테이터는 제대로 올라가는데 .. 왜 파일만 안 올라가는지..이해가 안되네요.
2 :앞의 질문[3바이트<아마두 \r\n\r\n 의 4바이트 일듯.. 하지만>도 이해가 안되구요]
언제나 즐프를 꿈꾸며~
소켓으로 웹-파일전달이 되지않습니다..
도저히 파일 전달이 되지않어.. 축소해서 테스트 중입니다.
어디가 문제인지..
아래 define은 이더리얼로 캡쳐한것이구..
no cache
쓰레기값 ---bounday형식으로 되어있어.. 쓰레기값만 삭제하여 define으로 정의하여 서버로 보낸것입니다.
아래소스는
write하기 전에 버퍼를 %c로 찍은값입니다.
test.txt 에 12345 5글자만을 찍어서 저장하고 전달하려구 줄였습니다.
[여기부터]까지 데이터
서버쪽소스는
결과는 언제나 "파일없음"이네요.. 간단한 텍스트 화일조차도 전달이 안되는데..
이게 뭔 일인지..
file_name은 test.txt로 넘어오는데..
바운더리도 맞구.. 뭐가 문제인지.
결과
파일없음 <br>USR_ID[12345678] <= 아직두 짧다..쩝.
언제나 즐프를 꿈꾸며~
댓글 달기