- Home /
Network Transport Layer API does not work with iOS to PC?
I am working on a new open source project called Navi (you can check out all the code at the github repo). In short, it is a system that transfers the sensor data via a local router to your PC for use cases in virtual reality. Currently, I have the system working for an Android device to a PC. However, after porting the code to iOS, I notice the following error message when the iOS device tried to connect to my PC:
Error: Hack attack in disconnect packet
However, when I try to connect the iPad to my Mac, it works just fine. The other interesting thing is that now when I connect my Android to my Mac, they do not pair and I get the following error in adb:
W/Unity (15172): Attempt to send to not connected connection {1}
W/Unity (15172):
W/Unity (15172): (Filename: Line: 352)
I should note that the android build was created by my PC and the iOS build was created on my Mac, which I am suspecting has something do with the problem.
I will link relevant source code from the project in case someone notices anything silly I am doing:
NaviConnectionSDK, which is network code that runs on the PC or Mac. (Note you do not need a VR headset to test this)
NaviMobileManager, which is the network code that runs on the iOS or Android device.
For a quick overview of how these things are getting connected, check this wiki page. Also, currently, the master branch does not build for iOS, so please check out the iOSBuild branch if you want to test it out. Please let me know if you have more questions and I would be happy to try and answer them.
I don't know if Unity is supposed to handle this for you, but when doing cross platform networking (at least in the old days) you'd have to handle byte ordering properly (i.e. dealing with the order the hardware stored the bytes in multi-byte integers). Each platform would convert to a standard network byte order when sending data, then convert from the network byte order to the platform byte order.
That used to be an issues with $$anonymous$$acs when they were using the $$anonymous$$otorola processors since they stored words in the reverse order from Intel processors. But now that they use Intel processors I don't know. But this is something to consider.
Interesting, I wonder then if this has to do with the fact that PC's compile Serialization code differently than $$anonymous$$acs. Here is a link to the data structure I use to serialize into a byte buffer:
I will give this a look tonight and see if this is the issue. That said, if this was the issue I am not sure how to go about fixing it.
Answer by VMohan · Sep 05, 2015 at 08:06 AM
Turns out the answer was a lot easier than I thought it was. I had compiled the PC version using Unity 5.1.1, but had compiled the iOS build in Unity 5.1.3. After upgrading, my PC build to Unity 5.1.3, they are able to connect regardless of where I build from. So, I guess the versions of the Network Layer API are incompatible.