Если у вас есть оба IP-адреса и они оба маршрутизируемые, это должно быть возможно. Я не уверен, хотя, если IP, выданный сетью 3G, является маршрутизируемым. Если вы используете WIFI, IP-адрес, который вы получаете, почти наверняка не маршрутизируется. Предполагая, что у вас есть маршрутизируемый IP, это должно быть возможно.
Хитрость заключается в обнаружении IP-адреса другого устройства. Лучший способ сделать это, вероятно, состоит в том, чтобы каждое устройство регистрировало свой IP в веб-службе при запуске приложения, а затем запрашивало бы эту службу, чтобы найти IP-адреса других устройств.
Может быть немного сложно управлять «незарегистрированными» IP-адресами, когда приложение закрыто или хотя IP-адрес меняется, но это должно быть выполнимо.
ETA:
Если у вас есть сервер, к которому они оба могут подключиться, вы сможете реализовать решение с использованием этого сервера (т.е. без непосредственного подключения телефонов друг к другу). Это позволило бы избежать проблемы наличия маршрутизируемых IP-адресов для телефонов.
Что касается того, как соединить сокеты вместе - ваша серверная программа будет работать в основном как оператор телефонного коммутатора старой школы. У вас будет какой-то протокол регистрации и обнаружения, встроенный в серверное программное обеспечение, который позволит телефону зарегистрироваться на сервере, запросить список других телефонов, подключенных к серверу в данный момент, указать, с каким телефоном он хочет разговаривать, и принимать соединения с других телефонов.
Как только он узнает, с кем хочет поговорить, ваше серверное программное обеспечение соединит их вместе, считав из разъема одного телефона и записав эти данные в разъем другого телефона.