Q&A

  • Indy UDP 의 SendBuffer 에 관해서 질문입니다.
안녕하세요..

상황을 설명드리겠습니다.

두 컴터가 있습니다.

둘다 각각의 공유기 안쪽에 있고 한쪽이 서버가 됩니다.

A 공유기 : 서버

B 공유기 : 클라이언트

A 와 B 는 같은 허브에 물려있고 같은 넷트워크에 속합니다.

사설 IP : 192.168.123.xxx
Subnet : 255.255.255.0


서버쪽 공유기(A공유기)에는 공유기의 포트포워딩 기능에 해당 UDP 포트를

포워딩 시켜놨습니다.


클라이언트 프로그램에선 아래와 같은 패킷구조체가 선언되어 있습니다.

type
  tagPacket = record
    Command : integer;
    Buffer : Array[1..10000] of Char;
  end;

그리고 IdUDPClient1 이름의 UDP 컴퍼넌트의 Host 는

서버쪽 공유기에 할당된 고정 IP 를 설정하고

ReceiveTimeout 은 0 으로 설정했습니다.

procedure sendData;
var
  sPacket : tagPacket;
  buffer : Array[1..10000] of Char;
begin
  FillChar(sPacket,sizeof(sPacket),0);   //구조체 초기화
  FillChar(buffer,sizeof(buffer),0);          //배열 초기화
  
  //A . 서버가 응답을 합니다.
  IdUDPClient1.Send('test');

  //B . 서버가 응답을 합니다.
  IdUDPClient1.SendBuffer(buffer,sizeof(buffer));

  //C. 서버가 응답을 하지 않습니다.
  IdUDPClient1.SendBuffer(sPacket,sizeof(sPacket));

  //D. 서버가 응답을 하지 않습니다.
  IdUDPClient1.SendBuffer(sPacket.Buffer,sizeof(sPacket.Buffer));

end;

그런데 위의 서버가 응답을 하지 않는 경우(C,D)라도

Host 를 서버의 사설 IP(클라이언트와 같은 넷트워크)로 바꾸면

응답을 합니다.

무엇이 문제인지 이렇게도 해보고 저렇게도 해보고

별짓을 다해봤지만 안되네요..

제가 뭔가를 놓치고 있는게 있나요...

답변 좀 부탁드리겠습니다....
0  COMMENTS