I must develop simple p2p connect app.
I have:
1) database server and simple code server (php, nodejs or similar);
2) two ios devices.
How can I connected p2p between devices (for stream voice, text and photos)? Connect by IP and random port impossible, because devices may has same IP.
Devices can located on local network or different countries. Devices can has wi-fi or 3g/4g internet. Devices can stationed behind a router, NAT.
I know about openpeer and others SIP services. But it's very big and excessive solution. WebRTC not work in ios and webView. Multipeer connectivity framework is local devices only.
My question: how I can detect, uniquely identify devices and connect his?
I see this as:
1) On start app and has internet (wi-fi or 3g/4g) - application send message to server.
2) Server get from app: IP, UUID or other (I dont know what information is necessary and sufficient for p2p connect).
3) Server register app and device in DB and return now on-line devices list.
4) App get from server list of other devices.
5) User select other devices and click "connect".
6) Server send to two devices the necessary for connection information (IP's, UUID's and other).
7) Devices start connect p2p, receiving and transmitting data without using a server.
I see this arhitecture (openpeer) image:.
It is good. I must know HOW "finder" server detect devices and what data is necessary and sufficient for connect?
For me unacceptable using third-party servers for connect.
Please help me find the solution.
Related
I've searched google and only found the MultipeerConnectivity framework in iOS but I don't know how I could make it work for my specific case.
The flow of what I want to do is like this:
Enable personal hotspot in iOS
Connect to hotspot from a raspberry pie
Once client is connected, send a message string from the iOS app.
Assuming that the raspberry pie connection is already sorted out (We're using a static SSID and Password for the hotspot)
The questions that come up are:
Which framework should I use (assuming there is one already)?
do I need to explicitly advertise the iOS device from the app?
How do I get notified when the raspberry connects to the phone?
How do I send a message to the connected client?
Although I never developed anything for Pi, I developed net service browsing for iOS devices, so can give an answer.
When you connect to iPhone hotspot, it's a usual WiFi connection, so here you can use Bonjour protocol (mDNS) to discover devices one another.
Run Avahi mDNS service on Pi, and discover it on iPhone.
Here is how to run Avahi on Pi.
Here is how to discover mDNS net service on iPhone.
After net service is discovered with NSNetServiceBrowser, you'll have IP address and port of your Pi available on your iPhone, so you can connect to it.
If you are trying to setup a IoT system, it may be useful to look into various cloud offerings to facilitate messaging between devices. Personally I have used AWS IoT core services in the past, and it is relatively easy to setup messaging between devices.
I am not sure what your exact use case is for this setup, but using a cloud based service to setup messaging between devices will remove the requirement to connect directly between devices via hotspot (the pi still needs some internet connection), and could make it easier to enable multiple devices and app clients in the system.
I did a lot of brain-storming about this, and couldn't reach a solution.
I am posting this as i can get some ideas.
I have developed a WiFi-IoT based device with sensor, which shows up in AP mode. A mobile phone connects to this AP and then the device starts sending sensor data to the mobile phone. A mobile application plots and displays this data.
Now, i want to send this data from mobile to internet. Connecting my mobile to another AP with internet is not an option, as i don't want to break the continuous data transmission.
Using internet of data provider is one option, but that brings constraint of have mobile data.
What other options do i have to send my data from mobile to internet ??
Edit:-
I worked on the suggestions, and came to this point:-
1) WiFi-IoT device (in station mode) and mobile phone connect to same Internet-enabled WiFi access point. WiFi-IoT device has the IP address of the mobile phone for current network, and sends data to a TCP port (eg. 9801) of this IP address. The application in mobile phone reads the data from the port no. 9801 and stores it and hosts it on the internet.
This works fine.
2)WiFi-IoT device comes up in Access Point mode, and the mobile phone connects to this Access Point. Now there is one-to-one connection between WiFi-IoT device and mobile phone.
My question is, in the second scenario, without breaking this one-to-one connection, is there way to host data to internet:-
1) without using mobile internet provided by mobile data service provider ?
2) without using a second mobile phone ?
I may be wrong, but i am just asking this to make be sure whether my requirement can be achieved or not !!
I don't think you can connect to two APs at the same time.
Maybe use Bluetooth as device to phone link?
Or have the device connect directly to internet after some config done in AP mode and then send a copy of the data to your phone app (either via WAN or locally to the private IP your phone gets from the Internet gateway AP)?
--Edit--
Let me explain about the second one:
What I mean is basically have your IoT device directly connect to Internet and send data to a server (your phone has also to be connected to Internet). Then make the server send a data copy back to your phone. It's two step process: 1) while the IoT device is in AP mode, use your phone to login and configure which Internet-connected AP it should be connected to. This serves as UI for your IoT device. 2) start sending data.
Or a bit ugly, just let the IoT device talk to your phone in the same WiFi network via private IP.
I brought up this way because you mentioned anyway your device has to send data to Internet(I assume it's a server) and have phone talk to a known location server is more portable and scalable once you have more than one IoT device.
--Further Edit--
I don't think there is a way to do what you described. At least from my experience:
1) on the link layer, the wireless NIC has to be able to connect to two APs at the same time. This is not a feature currently available.
2) on the network layer, there has to be two IP address attached to the same NIC, which I don't think is available in current OS for wireless NICs. Though there is a way to do this for Ethernet card, I.e. via Aliasing.
The theory in question is that I have a device that emits its own WiFi network. In order to communicate with this device, you must be connected to that WiFi network, but as it does not provide internet, your connection options are blocked.
What would be ideal, is to connect to this device, collect data from it, and transmit/push this data to a server located online via whatever means.
This question has been asked before, but the responses and questions I found were a few years old, and the OS has been updated a few iterations since then.
Is it possible, via Swift or Objective C within a mobile iOS app to utilize the connection of WiFi, but use carrier data to transmit that collected data?
I would use the BlueTooth API for this. However, there are two restrictions: 1) you cannot connect to a BlueTooth device in a captive network, and 2) you will not be able to connect to Android devices via BlueTooth.
I am working on a project in which I should connect an iPhone to an accessory via WIFI.
Some blogs spoke about ExternalAccessory.framework but this one is used for establishing connection via Bluetooth.
What library should I use to achieve this ? Could any one please point me to the right direction ? Thanks.
(Assuming that you don't know the ip address of the device you want to connect to)
From an iOS standpoint you want to use NSNetService to discover devices on the network which you can connect to.
This requires that your other device can use mdnsresponder to publish its details onto the network such that it can be found and connected to.
If you do know the ip address (or, once you do know it) then you can use NSURLConnection / NSStream to connect to the device (depending on what capabilities it offers).
I'm Developing an application. It is the Communication Between iPhone Application and a Hardware Device. in that Hardware Device We are Having SIM Card and also that Hardware Device had Some Settings. Now my task is i have to Modify that Settings By using our Mobile Application through Messaging.
I am able to send that settings in Some Message format to that Hardware Device.after settings have been changed the Hardware Device sends a response message. Now my Problem is I am Unable to Read that Message From My Application.
I Google it in Some Sources they Said:
1.There is No possibility of Reading SMS By using our Application.
2.It is Possible Only if the Phone is Jail Breaked.
is there any alternative solution for this i.e Communication Between iPhone Application and a Hardware Device through only messaging.
Why the hell are you using SMS for this? why not run a server socket on the device that listens for connection, implement some way of connecting remotely (intermediate server, static ip, UPNP etc) and connect and send data via TCP.
As you have stated in you question iOS doesn't allow you access to SMS, you will not be able to achieve this, unless the iPhone is jailbroken, there might be some level of access then but I have no experience with jailbreaking.