|
TCP/IP나 UDP 같은 경우 물리적인 포트를 통하여 통신을 하도록 설계된 것입니다.
따라서 한 PC내의 프로세스간 통신은 안되는 것으로 알고 있습니다.
(물리적인 포트가 2개인 경우라면, 두개의 어드레스를 가지고 물리적으로 케이블을 꼽아주면 되겠지만)
프로세스간의 통신을 하시려면 두가지 방법이 있습니다.
첫번째는 유저정의 메시지를 통하여 메시지를 주고받는 방법이 있고
두번째는 메모리 맵 파일을 이용하여 데이터를 공유하는 방법이 있습니다.
보통 실질적인 데이터를 주고받을 때는 메시지 보다는 메모리 맵을 많이 이용합니다.
(주고 받는다는 개념보다는 메모리를 공유한다는 개념이지만)
메모리 맵 파일은 실제 메모리에 존재하는 것이 아니고 하드디스크에 존재하기 때문에
극히 짧은 시간에 많은 데이터를 빈번하게 주고 받아야 한다면 원활하지 않을 수도 있습니다.
메모리 맵은 생성하는 것만 다를뿐 사용은 일반 파일과 같습니다.
이운국 님이 쓰신 글 :
: ..
: void __fastcall TBaseForm::FormCreate(TObject *Sender)
: {
: // UdpSocket1->LocalHost = UdpSocket1->LocalHostAddr();
: UdpSocket1->LocalHost = UdpSocket1->LocalHostName();
: UdpSocket1->RemoteHost = UdpSocket1->LocalHost;
: UdpSocket1->RemotePort = 9999; // 1; 다른프로그램 설정
: UdpSocket1->LocalPort = 1; // 9999;
: UdpSocket1->Open();
: }
: void __fastcall TBaseForm::UdpSocket1Receive(TObject *Sender, PChar Buf, int &DataLen)
: {
: StatusPanel->Caption = "Receive";
: memcpy( Packet, Buf, DataLen );
: if( ScanForm->Visible ) ScanForm->ViewScanBuffer( Packet, DataLen, false );
: }
: void __fastcall TBaseForm::SendButtonClick(TObject *Sender)
: {
: char *tt = "Test";
: memcpy( Packet, tt, 5 );
:
: if( ScanForm->Visible ) ScanForm->ViewScanBuffer( Packet, 5, true );
: UdpSocket1->SendBuf( Packet, 5, 5 );
: }
:
: 위와같이 작성했는데
: 아무런 응답이 없네요...
: 고수님들의 도움이 필요해요...
:
:
:
|