아.. 그 에러는 말씀해주신대로 배열을 잘못사용해서 발생하는 거였네요..
서버에서 write가 안됐던 문제는 제가 배열을 잘못해서 맨 처음 배열에 0이 들어있었고 이 값만 보내어져 안써지는 줄 착각했었네요..
변수를 TIdbytes로 선언하고 값을 보내니 원하는 배열 모두 write되는 것 같습니다.
read할때 데이터를 TIdBytes변수로 받고 수행했던걸 자세히 파악했으면 금방 해결됐었을거같은데... 한참을 헤맸네요
답변 친절하게 해주셔서 감사합니다!!!! :)
정성훈.해미 님이 쓰신 글 :
: 메모리 익셉션 에러는 대부분 배열을 잘못 사용했을때 발생합니다.
: 혹시
: unsigned char req[12];
: unsigned char res[10];
:
: 이 두개의 배열의 크기가 작진 않은지 확인해보세요.
:
:
:
:
: 탕구리 님이 쓰신 글 :
: : 답변 감사드립니다.
: :
: : 조언해주신대로....
: : 윈도우 방화역 아웃바운드에 해당 프로그램을 등록했는데도... 여전히 값은 들어오는데 나가지를 않네요 그리고 추가적으로 아래 작성한 코드 중 AContext->Connection->IOHandler->Write(*res); 를 가리키며 다음과 같은 debugger exception notification 창이 뜹니다.
: :
: : Project project1.exe raised exception class $C0000005 with message 'access violation at 0x004037f3:read of address 0x000000a4.
: :
: :
: :
: : 정성훈.해미 님이 쓰신 글 :
: : : 윈도우 방화벽 때문에 그럴 가능성이 큽니다.
: : :
: : : 데이터를 받는 것(인바운드) 같은 경우는
: : : 프로그램 실행시 네트워크 허용한다고 하면 바로 되는데
: : :
: : : 데이터를 보내는 것(아웃바운드)의 경우
: : : 윈도우 방화벽 설정에 잇는 아웃바운드에 해당 프로그램을 등록해주셔야
: : : 데이터가 외부로 나갈겁니다.
: : :
: : :
: : : 탕구리 님이 쓰신 글 :
: : : : 안녕하세요
: : : :
: : : : 현재 arm core를 client로, pc를 server로 동작하려고 합니다...
: : : :
: : : : C++builder에 indy tcp server가 있어서 이를 사용하려고 합니다.
: : : :
: : : : indy tcp에 대한 자세한 설명이나 sample code를 찾지 못해 google로 검색해가면서 구현을 하고 있는데요.. socket open, listen과 같은게 아니라 indy tcp는 execute 함수에서 수행을 하는것 같더라구요,,
: : : :
: : : : 검색검색 하면서 arm core에서 값을 보내면 이를 받는 것 까지는 확인을 했습니다.
: : : :
: : : : 근데 server에서 armcore(client)로 값이 써지지를 않는거 같습니다... 제가 어떤걸 간과했는지 알려주실 분 계신가요 ㅠㅠ
: : : :
: : : : 아래는 제가 작성한 코드입니다.
: : : :
: : : :
: : : : void __fastcall TForm1::IdTCPServer1Execute(TIdContext *AContext)
: : : : {
: : : : TIdBytes SocketReceiveArray;
: : : : unsigned char req[12];
: : : : unsigned char res[10];
: : : : int size;
: : : : int i=0;
: : : : try
: : : : {
: : : : size = AContext->Connection->IOHandler->InputBuffer->Size;
: : : : if(size >= 1)
: : : : {
: : : : memset(req,0x00,size);
: : : : AContext->Connection->IOHandler->ReadBytes(SocketReceiveArray, size, false);
: : : : BytesToRaw(SocketReceiveArray, req, size);
: : : : for(i=0;i<=size;i++)
: : : : {
: : : : mmComList->Lines->Add(req[i]);
: : : : res[i] = i;
: : : : }
: : : : }
: : : : AContext->Connection->IOHandler->Write(*res);
: : : : }
: : : : __finally
: : : : {
: : : : // AContext->Connection->Disconnect();
: : : : }
: : : :
: : : : }
|