On 12/26/13, Jens Alfke <j...@mooseyard.com> wrote:
>
> On Dec 25, 2013, at 7:26 AM, Eric Wing <ewmail...@gmail.com> wrote:
>
>> I can publish my iPhone via Bonjour and make my Mac discover and
>> resolve the address. I try to create a NSURLSessionDownloadTask on my
>> Mac and a NSURLSessionUploadTask on my iPhone.
>
> That won’t work, because both of those are acting as HTTP clients (one
> sending a GET, the other probably a PUT.) Unless one of them acts as a
> server instead, they can’t talk to each other.
>
> All Bonjour does is advertise the availability of a listener/server/service
> on a port. But it doesn’t actually _create_ that listener — that’s your
> responsibility. You have to run some kind of server code that will bind to
> that port, accept connections, and speak the desired protocol.
>
> The problem is, Apple doesn’t include any high-level APIs for running such a
> server. Most commonly people want to serve HTTP. You can cobble together a
> crude HTTP server using CFStream and CFHTTPMessage, but there are a lot of
> details involved in making one that will work for real (i.e. well enough to
> talk to a browser.) Or you could build a very simple custom protocol if all
> you need to do is transfer a blob of data.
>
> Take a look at Apple’s PictureSharing sample code, which shows how to set up
> a basic server and client to send data.
> If you want to run a real HTTP server, the best package I know of is
> CocoaHTTPServer (find it on Github.)
>
> —Jens

Thanks for the explanation Jens. I definitely misunderstood the notion
of "server" with http uploading (I thought NSURLSessionUploadTask
would be the server). This is partly why I couldn't seem to feed the
NSNetService addresses/ports into something useful for me.

Based on Stephen's reply, I had already found CocoaHTTPServer. After
several (very long) days, I have a prototype that works for me with
both NSURLSession clients and also Android/Java HttpURLConnection
based clients, all discoverable through Zeroconf.

This was a lot harder than I thought it would be though. I struggled
with lots of separate details, such as changing the CocoaHTTPServer's
file example which was a Content-Type "multipart" example into
something that uses "application/octet-stream" (which uploading a file
with NSURLSession seems to set), and then figuring out how to send the
same with HttpURLConnection and encountering things like fixed-length
vs chunked streaming mode. (I never did figure out how to send an EOF
when in chunked mode.) I was hoping both the Cocoa and Java frameworks
had advanced enough to the point where things like file serving was
trivial for a network dummy like myself, but I don't think they are
there yet. To their credit, I still managed to get something that
eventually worked, albeit with a lot more effort and ugly.

Thanks,
Eric
-- 
Beginning iPhone Games Development
http://playcontrol.net/iphonegamebook/

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to