android - 使用 socket 连接两部手机

标签 android sockets

是否可以使用套接字编程连接两部手机? 我尝试了以下代码,但没有成功

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

最佳答案

根据套接字编程,两个客户端套接字不能相互连接。同样,两个服务器套接字不能相互连接。您编写的代码表明您已经编写了服务器套接字。你需要一个客户端套接字,它将连接到服务器套接字。要创建客户端套接字,您需要服务器套接字的 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();
 }
}

谢谢 迪帕克

关于android - 使用 socket 连接两部手机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6071521/

相关文章:

java - 使用 VirtualBox 在虚拟机上测试客户端/服务器 Java 应用程序

安卓 : Thread does not start

Java 网络代码在对象接收之前执行

android - 如何在真实设备上调试(使用 Eclipse/ADT)

android - 如何管理 Android 项目的免费和付费版本?

c# - 在没有 System.Net.Sockets 的情况下将 Unity 连接到 C++ WinSocket

java - 从套接字读取/写入JSON

android - 如何在语义上比较两个句子?

android - 如何为Microsoft Visual Studio Team创建JaCoCo xml报告和xml摘要?

android - setMyLocationEnabled 函数在 Android Studio 中不起作用