Подключение двух телефонов с помощью разъема - PullRequest
1 голос
/ 20 мая 2011

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

 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();
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 20 мая 2011

В соответствии с программированием сокетов два клиентских сокета не могут соединяться друг с другом.аналогично два серверных сокета не могут соединиться друг с другом.Код, который вы написали, говорит о том, что вы написали сокет сервера.вам нужен клиентский сокет, который будет подключаться к серверному сокету.для создания клиентского сокета вам нужен IP и порт серверного сокета.Пожалуйста, посмотрите на код ниже.Не забудьте проголосовать, если ответ окажется полезным для вас.Пример ниже в ядре Java.Вы можете реализовать оба в 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();
 }
}

Спасибо Deepak

1 голос
/ 20 мая 2011

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...