2つのアンドロイド携帯電話をソケット経由で接続する際に問題があります。私はアンドロイドのデバッグブリッジを使用して携帯電話をPCに接続し、携帯電話でエミュレータを起動できます。Android Socket Connectioが拒否されました
私はしかし、私は私のクライアント側で次のエラーを取得する1回の電話でサーバーを起動し、他に接続しよう:
W/System.err: java.net.ConnectException: failed to connect to /192.168.49.1 (port 8080): connect failed: ECONNREFUSED
サーバー
private class SocketServerThread extends Thread {
static final int SocketServerPORT = 8080;
@Override
public void run() {
try {
serverSocket = new ServerSocket(SocketServerPORT);
Log.d("Quiz", "Server creation connection success");
Log.d("Quiz", "Server local port "+serverSocket.getLocalPort());
Log.d("Quiz", "Server local port "+serverSocket.getInetAddress());
HostingScreen.this.runOnUiThread(new Runnable() {
@Override
public void run() {
}
});
while (true) {
Socket socket = serverSocket.accept();
count++;
message += "#" + count + " from " + socket.getInetAddress()
+ ":" + socket.getPort() + "\n";
HostingScreen.this.runOnUiThread(new Runnable() {
@Override
public void run() {
msg.setText(message);
}
});
SocketServerReplyThread socketServerReplyThread = new SocketServerReplyThread(
socket, count);
socketServerReplyThread.run();
}
} catch (IOException e) {
e.printStackTrace();
}
}
クライアント
@Override
protected Object doInBackground(Object[] params) {
Socket socket = null;
try {
socket = new Socket(host,port);
Log.d("Quiz", "Client socket success");
connected = true;
while (connected) {
try {
Log.d("Quiz", "Sending command");
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream())), true);
// where you issue the commands
} catch (Exception e) {
}
}
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(socket != null){
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
ポートは、当面はサーバとクライアントの両方でポート8080にハードコードされています。ホスト私は次のコードを使用して電話機間の接続を行う際にアドレスが発見された:
接続
private void onConnectionChanged(Intent intent) {
final NetworkInfo netInfo = intent.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO);
final WifiP2pInfo p2pInfo = intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_INFO);
isConnected = netInfo.isConnected();
if (isConnected) {
//Get host connection info
wifiMgr.requestConnectionInfo(channel, new ConnectionInfoListener() {
@Override
public void onConnectionInfoAvailable(final WifiP2pInfo info) {
wifiMgr.requestGroupInfo(channel, new GroupInfoListener() {
@Override
public void onGroupInfoAvailable(WifiP2pGroup group) {
if (group == null)
return;
WiFiP2P.this.group = group;
Log.d(TAG, "Wifi p2p connection group is " + group.getNetworkName());
Log.d(TAG, "Group size " + group.getClientList().size());
fireOnConnectionSucceed(group.getNetworkName(), group.getPassphrase());
//create client if not host
if(info.isGroupOwner) {
Client client = new Client(8080, p2pInfo.groupOwnerAddress.getHostAddress());
client.execute();
Log.d(TAG, "Client launch success");
Log.d(TAG, "Host address " + p2pInfo.groupOwnerAddress.getHostAddress());
}
}
});
if (isConnected && !info.isGroupOwner) {
} else {
startDiscovery();
}
}
});
} else {
group = null;
fireOnConnectionLost();
}
}
私はクライアントの通過を起動していない場合、私は、接続されている人がホストであるかどうかを確認します接続するソケットが作成されるAysncタスクであるクライアントへのポートとホストアドレス。
socket = new Socket(host,port);
は、エラーが記載原因使用する場合
エラーがクライアントで発生します。
問題の原因は何ですか?彼らは両方のWiFiを介してお互いに接続するが、私はサーバーソケットに接続しようとすると失敗します。
ありがとうございます。
編集: somethingsを消去するには、私はadbを使用して、私のアプリを起動することができます私の電話に私のコンピュータからアプリを取得します。
私はwifimanagerを使用して両方の電話機を接続しています。私はwifiグループを作成した電話機を見つける必要があります。そして、その人物が接続するソケットを起動しようとすると、接続情報からホストアドレスを使用してホストに送信します。
「電話機でエミュレータを起動する」。 ??????? – greenapps
'接続している人がホストであるかどうかを確認します。 '申し訳ありませんが、私はあなたが何をしているのか分かりません。 – greenapps
'私はPCに電話を接続するためにアンドロイドデバッグブリッジを使用しています。 '私はあなたのPCにそれらを接続する理由はありません。 – greenapps