WiFiを使用してPCと携帯電話の間でデータを転送したい。
これは私がWiFi IPアドレスを取得する方法です:
String ip = String.format(
"%d.%d.%d.%d",
(wifiInfo.getIpAddress() & 0xff),
(wifiInfo.getIpAddress() >> 8 & 0xff),
(wifiInfo.getIpAddress() >> 16 & 0xff),
(wifiInfo.getIpAddress() >> 24 & 0xff));
new Recive().execute(ip);
これは、PCへのメッセージ送信に関するコードです。
Socket socket = null;
String message = "test\r\n";
protected Void doInBackground(String... urls) {
try {
Log.i("ip", urls[0]);
socket = new Socket(urls[0], 2468);
toserver = new DataOutputStream(socket.getOutputStream());
toserver.writeBytes(message);
toserver.flush();
toserver.close();
socket.close();
return null;
} catch (Exception e) {
Log.i("e", e.toString());
return null;
}
}
しかし、エラーが発生し、
Java.net.ConnectException:/192.168.253.3への接続に失敗しました(ポート2468):接続に失敗しました:ECONNREFUSED(接続は拒否されました)
また、Android電話を使用してアプリを実行します。
connect failed: ECONNREFUSED (Connection refused)
は、ほとんどの場合、そのポートとそのIPアドレスでリッスンしていないことを意味します。考えられる説明は次のとおりです。
urls
という配列変数がありますが、実際のURLを含めることはできません。任意の形式の実際のURLを取るSocket
コンストラクターのオーバーロードはありません。実際、次のような文字列形式のURLを指定した場合:
new Socket("http://example.com", 42)
結果は別の例外になります。同様に、ルーティングできないネットワーク上のIPアドレス(「別のWiFiネットワーク」など)に接続しようとすると、別の例外が発生します。例えば「ホストが見つかりません」、「ホストへのルートがありません」、または「ネットワークへのルートがありません」。
開発マシンの仮想デバイスで実行するAndroidアプリの開発中によくある間違いは、仮想デバイスが開発マシンと同じホストではないことを忘れることです。開発マシンでは、開発マシンではなく仮想デバイス上のサーバーエンドポイントを検索するため、「 http:// localhost / ...」URLを使用できません。
なぜこれが起こったのか:
また、パブリックIPやローカルホストのデフォルトIP 127.0.0.1などの複数のIPをWindowsおよびデフォルトゲートウェイで試しましたが、同じ応答がありました。しかし、私はチェックするのを忘れます
C:> ipconfig
ipconfigは、Wifiアダプターに接続されたように接続したアダプターの実際のIPアドレスが何であるかを明確に言うと、私のIPアドレスには次のように表示されます。
Wireless LAN adapter Wireless Network Connection:
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::69fa:9475:431e:fad7%11
IPv4 Address. . . . . . . . . . . : 192.168.15.92
これがあなたのお役に立てば幸いです。
まず、「localhost:port」形式を使用してこのエラーが発生しました。次に、アドレスを「ip:port」形式に変更し、問題を解決しました。