안녕하세요..
상황을 설명드리겠습니다.
두 컴터가 있습니다.
둘다 각각의 공유기 안쪽에 있고 한쪽이 서버가 됩니다.
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(클라이언트와 같은 넷트워크)로 바꾸면
응답을 합니다.
무엇이 문제인지 이렇게도 해보고 저렇게도 해보고
별짓을 다해봤지만 안되네요..
제가 뭔가를 놓치고 있는게 있나요...
답변 좀 부탁드리겠습니다....