Dont use connect, just use listen, but use SendTo to send the packet.  This 
lets you specify the address.

Dan

----- Original Message ----- 
From: "Kris Schoofs" <[EMAIL PROTECTED]>
To: "'ICS support mailing'" <twsocket@elists.org>
Sent: Sunday, April 02, 2006 10:46 AM
Subject: Re: [twsocket] THttpCli and UPnP devices


> Thanks Angus. Suggesting to use UDP made it suddenly a lot more
> comprehensible...
>
> I've played around with it and I've noticed that all UPnP devices on the
> network repond with an unicast message sent to my IP on the same port that 
> I
> previously had used to multicast the UDP containing the discovery request.
>
> ** My outgoing UDP Packet :
> Internet Protocol, Src: 10.0.0.39 (10.0.0.39), Dst: 239.255.255.250
> (239.255.255.250)
> User Datagram Protocol, Src Port: 1059 (1059), Dst Port: 1900 (1900)
>
> ** An incoming UDP Packet in response to my discovery request :
> Internet Protocol, Src: 10.0.0.138 (10.0.0.138), Dst: 10.0.0.39 
> (10.0.0.39)
> User Datagram Protocol, Src Port: 1900 (1900), Dst Port: 1059 (1059)
>
> So, what I now do is multicast the UDP Packet, remember the port that was
> used for sending (WSocket->LocalPort), close the socket. And immediately
> re-open it but this time for listening on that same port...
>
> // SEND
> WSocket->Proto="udp";
> WSocket->Port=1900;
> WSocket->Addr ="239.255.255.250";
> WSocket->MultiCast=true;
> WSocket->Connect();
> String MyPort=WSocket->LocalPort;
> WSocket->SendStr(SSDP_Message);
> WSocket->Close();
> // LISTEN
> WSocket->Addr="0.0.0.0";
> WSocket->Port=MyPort;
> WSocket->MultiCast=false;
> WSocket->OnDataAvailable=WSocketDataAvailable;
> WSocket->Listen();
>
> This seems to work fine most of the time. However, every now and then the
> WSocket->OnDataAvailable does not get triggered. Any ideas what is causing
> this ? Is it OK to close the socket after sending and then immediately 
> open
> it again for listening on that same port ?
>
> Thanks.
>
> Kris
>
>
> //--------------------------------------------------------------------------
> -
> void __fastcall TMainForm::WSocketDataAvailable(TObject *Sender, WORD 
> Error)
> {
> char        Buffer[1024];
> int         Len;
> TSockAddrIn Src;
> int         SrcLen;
>
> SrcLen = sizeof(Src);
> Len    = WSocket->ReceiveFrom(Buffer, sizeof(Buffer), Src, SrcLen);
> if (Len >= 0) {
>        Buffer[Len] = 0;
>        DataAvailableLabel->Caption =
>            IntToStr(atoi(DataAvailableLabel->Caption.c_str()) + 1) +
>            ": " + Buffer;
> }
> }
> //--------------------------------------------------------------------------
> -
>
>
>
>
>
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
> Behalf Of Angus Robertson - Magenta Systems Ltd
> Sent: vrijdag 31 maart 2006 1:54
> To: twsocket@elists.org
> Subject: Re: [twsocket] THttpCli and UPnP devices
>
>> I'm having a first look at discovering UPnP devices and I was
>> wondering if THttpCli can be used for this purpose ?
>>
>> Communicating with UPnP devices uses HTTP over UDP (HTTPMU and HTTPU).
>> In order to discover devices you send(post) a HTTP request using the
>> multicast address 239.255.255.250 on port 1900. All devices should
>> then respond to this request.
>
> It's not really HTTP as such, it's just a UDP broadcast that should cause
> one UDP packet to be returned by each device, each packet containing HTTP
> formatted data.  Sounds like a one hour project.
>
> Forget THttpCli, it uses TCP/IP with connections, totally different to
> UDP.
>
> Angus
> --
> To unsubscribe or change your settings for TWSocket mailing list please 
> goto
> http://www.elists.org/mailman/listinfo/twsocket
> Visit our website at http://www.overbyte.be
>
> -- 
> To unsubscribe or change your settings for TWSocket mailing list
> please goto http://www.elists.org/mailman/listinfo/twsocket
> Visit our website at http://www.overbyte.be
> 

-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to