답변 감사드립니다.
조언해주신대로....
윈도우 방화역 아웃바운드에 해당 프로그램을 등록했는데도... 여전히 값은 들어오는데 나가지를 않네요 그리고 추가적으로 아래 작성한 코드 중 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();
: : }
: :
: : }
|