|
yun 님 답변 감사합니다~~
근데..알려주신게 델파이라그런지..제가 이해를 잘 못한거 같거든여...
일단...알려주신거...나름대로 적용을 해봤거든요...
UDPclient소켓에서 보낼때...
UDP->Host = ClientAddress;
UDP->SendBuffer( &UDP_Packet, sizeof(UDP_packet) );
UDP->ReceiveString(1000);
.
.
.
UDPServer 소켓에서 받을때..UDPServerRead이벤트에서..
AData->Read( &UDP_ClientPacket, ReceiveBytes );
해서 받아 읽은 다음...뭐 이것저것 처리..
다시 확인했다고 응답을 날려줄때..
ABinding->SendTo(ABinding->PeerIP, ABinding->PeerPort, &UDP_Packet, sizeof(UDP_packet));
근데...컴파일하고...실행하면 에러가 나던데여...
Project Exam.exe raised exception class EldSocketError with message 'Socket Error #10054
Connection reset by peer.' 하고 에러가 나거든요..
UDP->ReceiveString(1000); 이부분을 주석처리하면 에러가 안나고요...
주석처리 안하면 괄호안에 시간만큼 딜레이가 생긴 후 에러가 생기거든여..
워낙 제가 허접한지라..자세한 설명 부탁드립니다~~
yun 님이 쓰신 글 :
: procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
: ABinding: TIdSocketHandle);
: var
: DataStringStream : TStringStream;
: ReStr : String;
: begin
: DataStringStream := TStringStream.Create('');
: try
: DataStringStream.CopyFrom(AData, AData.Size);
: ReStr := DataStringStream.DataString;
: if Restr <> '' then
: begin
: ABinding.SendTo(ABinding.PeerIP,ABinding.PeerPort,ReStr[1], Length(ReStr)); //온 데이타 그대로 전송
: end;
: finally
: DataStringStream.Free;
: end;
: end;
:
: 이렇게 한번 해보시겠어요?? 이미 이렇게 해보셨었나요..?
: UDPClientsocket 쪽은 데이타 보내고 rxStr := UDPClientsocket .ReceiveString(1000); 이런식으로
: 해놓으시구요...
:
: UDPserversocket쪽이 공인 아이피여야 하고요...
:
: 빵샹시 님이 쓰신 글 :
: : 저번에 질문 올렸었는데 유영인님께서 답변 해주셨는데요...워낙 실력이 딸려서..잘 이해가 안가서요....
: : 인디 udp서버/클라이언트를 써서 간단히 패킷 구성해서...서로 통신하게 하려 하는데용..
: : 실제 아이피끼리..그러니까 공인아이피끼리는 잘 되거든요...
: : 근데...보내는 쪽이 내부 네트웍 안에 있는 가상아이피면 보내는걸 다른쪽 실제 아이피에서 받긴 하는데 거기에 대해서 응답하려고 다시 가상 아이피쪽으로 패킷 보내면 그게 가상쪽에서 못받더라고요...
: : 쉽고 간단한 거라 하던데...어찌 해야 할지..ㅠ.ㅠ
: :
: : 보내는 쪽에선
: : UDP->Host = ClientAddress;
: : UDP->SendBuffer( &UDP_Packet, sizeof(UDP_packet) );
: : 하고 보내고...
: :
: : 받는쪽에선..UDPServerRead이벤트에서..
: : AData->Read( &UDP_ClientPacket, ReceiveBytes );
: : 해서 받아 읽은 다음...뭐 이것저것 처리..
: :
: : 다시 확인했다고 응답을 날려줄때..
: : UDP->Host = ReceiveAddress;
: : UDP->SendBuffer( &UDP_Packet, sizeof(UDP_recievePacket) );
: : 하거덩여...
: :
: : 모가 중간에 빠진건지...이번주 안에는 해결해야 할꺼인데..OTL
: : 어찌해야 할찌...꼭 알려주세요!! ㅠ.ㅠ
|