【问题标题】:Client socket not connecting to server socket客户端套接字未连接到服务器套接字
【发布时间】:2017-02-25 14:10:07
【问题描述】:

我正在尝试通过本地网络在两部安卓手机之间传输消息。我读了套接字,这是一个很好的方法。 (我不能使用蓝牙) (我也不能使用 NFC)

我已经构建了一个服务器和客户端应用程序。

一个应用有一个监听连接的服务器。
另一个应用程序有一个客户端,它会在按下按钮时尝试连接。

两个清单文件都包含正确的权限。 (带有 html 标签)
使用权限 android:name="android.permission.INTERNET" /
使用权限>android:name="android.permission.ACCESS_NETWORK_STATE"/

我先把服务器上线:

      ServerSocket myServerSocket = new ServerSocket(27024);
      System.out.println("Server is waiting for incoming connection on host=" + InetAddress.getLocalHost().getCanonicalHostName() + ", port=" + myServerSocket.getLocalPort());
      Socket socket = myServerSocket.accept();

然后尝试与客户端连接。

            String host = "localhost";
            int port = 27024;

            try{
                System.out.println("Client attempting to connect to server at host: " + host + ", port: " + port);
                Socket socket = new Socket(host, port);

                //This below line never gets called :(
                System.out.println("Client socked created! Now trying to send data to server");

               }

在我的控制台中:
客户端尝试连接到主机上的服务器:localhost,端口:27024

“客户端已创建!”行永远不会得到输出。

两台主机都设置为“localhost”,端口号相同。
我尝试了各种端口,但没有任何反应。

【问题讨论】:

    标签: java android sockets networking


    【解决方案1】:
    String host = "localhost";
    int port = 27024;
    

    您意识到需要为您的客户端提供服务器的 IP 地址,对吗?

    注意您很可能无法或永远不应在非 WiFi 接口上绑定应用程序。

    【讨论】:

    • 但是客户端和服务器都在本地网络上,本地主机?
    • localhost 指的是应用程序正在运行的设备,地址永远是127.0.0.1,本地环回。使用此地址,数据包永远不会离开设备。您需要在其他设备上使用每个设备的 IP。
    • 天哪,这让我觉得自己很愚蠢,我现在明白为什么我在 youtube 上观看的这些家伙的示例有效 - 因为他在一台机器上运行客户端和服务器。
    • 好的,我有一部模拟手机正在运行,还有一部真实手机 - 试图将它们连接起来。我已输入模拟电话(服务器)作为客户端应用程序的主机(主机 ip 为 10.0.2.15)。但是我没有运气连接
    • 模拟手机?你的意思是?模拟器?告诉你的服务器在哪里运行。并准确告诉您的客户端在哪里运行。您不能使用模拟器和电话。但是你有两部手机不是吗?告诉我们服务器电话的 ip。告诉我们客户端电话的IP。 (客户端电话的 ip 进一步无关)。