Подключение двух телефонов с помощью разъема

1

Можно ли подключить два телефона с помощью программирования сокетов? Я пробовал следующий код, но он не работал.

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    serverStatus = (TextView) findViewById(R.id.server_status);

    SERVERIP = getLocalIpAddress();//Public function to get ip address to it is //working fine 

    Thread fst = new Thread(new ServerThread());
    fst.start();
}

public class ServerThread implements Runnable {

    public void run() {
        try {
            if (SERVERIP != null) {
                handler.post(new Runnable() {
                    public void run() {
                        serverStatus.setText("Listening on IP: " + SERVERIP);
                    }
                });
                serverSocket = new ServerSocket(8087);
                   } else {
                handler.post(new Runnable() {
                    public void run() {
                        serverStatus.setText("Couldn't detect internet connection.");
                    }
                });
            }
        } catch (Exception e) {
            handler.post(new Runnable() {
                public void run() {
                    serverStatus.setText("Error");
                }
            });
            e.printStackTrace();
        }
    }
}
  • 0
    Что вы подразумеваете под "это не сработало"? Что случилось?
  • 0
    да, однако маловероятно, что вы когда-либо сможете соединить два телефона через прямые розетки, которые подключены через сети провайдеров телефонов из-за NAT и т. д.
Показать ещё 2 комментария
Теги:
sockets

2 ответа

1
Лучший ответ

Да, это возможно, но я думаю, что первое, что вам нужно сделать, - это прочитать Программирование Java Socket, поскольку есть несколько проблем с ваш код, который заставляет меня думать, что вы еще не поняли его. Основные проблемы:

  • Ваш ServerSocket никогда не принимает соединение и поэтому никогда не "слушает".
  • Даже если он прослушивает, если этот код работает на обоих телефонах, они будут только слушать, а не активно искать соединение друг с другом.

Вам нужно будет реализовать клиента на одном телефоне и на сервере, как показано на рисунке @Deepak.

Кроме того, вы можете проверить AsyncTask в эту статью для обновления представлений из потока, отличного от UI (вместо обработчика).

Наконец, убедитесь, что ваше приложение включает в себя разрешение android.permission.INTERNET в AndroidManifest.xml.

  • 0
    Спасибо Гэри ... Код, который я написал, работает нормально. Это показывало ошибку, потому что я не дал разрешение на интернет android.permission.INTERNET, он работает сейчас
2

В соответствии с программированием сокетов два клиентских сокета не могут подключаться друг к другу. аналогично, два гнезда сервера не могут подключиться друг к другу. Код, который вы написали, говорит о том, что вы создали серверный сокет. u нужен клиентский сокет, который будет подключаться к серверному сокету. для создания клиентского сокета u нужен ip и порт серверного сокета. Пожалуйста, ознакомьтесь с приведенным ниже кодом. Не забудьте проголосовать, если вы найдете ответ полезен для вас. Ниже приведен пример в ядре Java. u также может реализовывать оба в andriod.

Server
-------
    import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;


class TCPServer
{
   public static void main(String argv[]) throws Exception
      {
         String clientSentence;
         String capitalizedSentence;
         ServerSocket welcomeSocket = new ServerSocket(6789);

         while(true)
         {
            Socket connectionSocket = welcomeSocket.accept();
            BufferedReader inFromClient =
               new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
            DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
            clientSentence = inFromClient.readLine();
            System.out.println("Received: " + clientSentence);
            capitalizedSentence = clientSentence.toUpperCase() + '\n';
            outToClient.writeBytes(capitalizedSentence);
         }
      }
}



Client
--------------
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.Socket;


class TCPClient
{
 public static void main(String argv[]) throws Exception
 {
  String sentence;
  String modifiedSentence;
  BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));
  Socket clientSocket = new Socket("localhost", 6789);
  DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
  BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
  sentence = inFromUser.readLine();
  outToServer.writeBytes(sentence + '\n');
  modifiedSentence = inFromServer.readLine();
  System.out.println("FROM SERVER: " + modifiedSentence);
  clientSocket.close();
 }
}

Спасибо Дипак

Ещё вопросы

Сообщество Overcoder
Наверх
Меню