Можно ли подключить два телефона с помощью программирования сокетов? Я пробовал следующий код, но он не работал.
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();
}
}
}
Да, это возможно, но я думаю, что первое, что вам нужно сделать, - это прочитать Программирование Java Socket, поскольку есть несколько проблем с ваш код, который заставляет меня думать, что вы еще не поняли его. Основные проблемы:
ServerSocket
никогда не принимает соединение и поэтому никогда не "слушает".Вам нужно будет реализовать клиента на одном телефоне и на сервере, как показано на рисунке @Deepak.
Кроме того, вы можете проверить AsyncTask
в эту статью для обновления представлений из потока, отличного от UI (вместо обработчика).
Наконец, убедитесь, что ваше приложение включает в себя разрешение android.permission.INTERNET
в AndroidManifest.xml
.
В соответствии с программированием сокетов два клиентских сокета не могут подключаться друг к другу. аналогично, два гнезда сервера не могут подключиться друг к другу. Код, который вы написали, говорит о том, что вы создали серверный сокет. 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();
}
}
Спасибо Дипак