Difference between revisions of "NSNetServices"
Jump to navigation
Jump to search
(stub) |
m (NSNetService moved to NSNetServices) |
||
(One intermediate revision by one other user not shown) | |||
Line 2: | Line 2: | ||
'''NSNetService''' lets you publish a network service in a domain using multicast DNS. Additionally, it lets you resolve a network service that was discovered by [[NSNetServiceBrowser]]. | '''NSNetService''' lets you publish a network service in a domain using multicast DNS. Additionally, it lets you resolve a network service that was discovered by [[NSNetServiceBrowser]]. | ||
+ | |||
+ | == Code chunks == | ||
+ | |||
+ | === How to resolve an address === | ||
+ | |||
+ | When you [[NSNetServiceBrowser|browse]] for a service, your delegate will eventually receive a ''-netServiceBrowser:didFindService:moreComing:'' message. | ||
+ | |||
+ | - (void)netServiceBrowser: (NSNetServiceBrowser *) aNetServiceBrowser | ||
+ | didFindService: (NSNetService *) aNetService | ||
+ | moreComing: (BOOL) moreComing | ||
+ | { | ||
+ | [aNetService setDelegate: self]; | ||
+ | [aNetService resolve]; | ||
+ | } | ||
+ | |||
+ | When you send ''-resolve'' this will eventually result in a message sent to the delegate: | ||
+ | |||
+ | - (void) netServiceDidResolveAddress: (NSNetService *) sender | ||
+ | { | ||
+ | NSString *name = nil; | ||
+ | NSData *address = nil; | ||
+ | struct sockaddr_in *socketAddress = nil; | ||
+ | NSString *ipString = nil; | ||
+ | int port, i = 0; | ||
+ | |||
+ | // A service is published on ALL network addresses, | ||
+ | // so ''-addresses'' may contain more than one IP | ||
+ | |||
+ | for( ; i < [[sender addresses] count]; i++ ) | ||
+ | { | ||
+ | name = [sender name]; | ||
+ | address = [[sender addresses] objectAtIndex: i]; | ||
+ | |||
+ | // IPs are sockaddr_in structures encapsulated in NSData... | ||
+ | |||
+ | socketAddress = (struct sockaddr_in *) [address bytes]; | ||
+ | ipString = [NSString stringWithFormat: @"%s", inet_ntoa(socketAddress->sin_addr)]; | ||
+ | port = socketAddress->sin_port; | ||
+ | [...] | ||
+ | } | ||
+ | } | ||
+ | |||
+ | After you have the name, IP and port you are ready to use that information. You will probably store the information in an array so you can access it any time you need it. | ||
[[Category:Foundation]] | [[Category:Foundation]] | ||
+ | [[Category:Snippets]] |
Latest revision as of 09:57, 24 January 2009
This article or section is a stub (i.e., in need of additional material). You can help us by expanding it |
---|
NSNetService lets you publish a network service in a domain using multicast DNS. Additionally, it lets you resolve a network service that was discovered by NSNetServiceBrowser.
Code chunks
How to resolve an address
When you browse for a service, your delegate will eventually receive a -netServiceBrowser:didFindService:moreComing: message.
- (void)netServiceBrowser: (NSNetServiceBrowser *) aNetServiceBrowser didFindService: (NSNetService *) aNetService moreComing: (BOOL) moreComing { [aNetService setDelegate: self]; [aNetService resolve]; }
When you send -resolve this will eventually result in a message sent to the delegate:
- (void) netServiceDidResolveAddress: (NSNetService *) sender { NSString *name = nil; NSData *address = nil; struct sockaddr_in *socketAddress = nil; NSString *ipString = nil; int port, i = 0; // A service is published on ALL network addresses, // so -addresses may contain more than one IP for( ; i < [[sender addresses] count]; i++ ) { name = [sender name]; address = [[sender addresses] objectAtIndex: i]; // IPs are sockaddr_in structures encapsulated in NSData... socketAddress = (struct sockaddr_in *) [address bytes]; ipString = [NSString stringWithFormat: @"%s", inet_ntoa(socketAddress->sin_addr)]; port = socketAddress->sin_port; [...] } }
After you have the name, IP and port you are ready to use that information. You will probably store the information in an array so you can access it any time you need it.