0

私はほとんどすべてを試しました。

  1. adb forward TCP:12345 TCP:12345 を使用した ADB シェルからの転送
  2. 10.0.2.2 (転送なし) を使用してホスト マシンをリッスンする
  3. マニフェストで INTERNET 権限を設定する
  4. すべての機能を許可するスレッド ポリシーの設定

クライアント Java プログラムを 12345 ポートで実行しており、同じポートをリッスンする Android プログラムに ServerSocket があります。しかし、(エミュレーターでサーバー プログラムを実行した後) クライアントを実行し、転送する文字列を入力すると、「接続が拒否されました」という例外が発生します。

    java.net.ConnectException: Connection refused: connect

これが私のサーバープログラムです:

public class MainActivity extends Activity {
    TextView tv;
    ServerSocket ss = null;
    String mClientMsg = "";
    Thread myCommsThread = null;

    public static final int SERVERPORT = 12345;
    protected static final int MSG_ID = 0x1337;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = new TextView(this);
        tv.setText("Nothing from client yet");
        setContentView(tv);
        this.myCommsThread = new Thread(new CommsThread());
        this.myCommsThread.start();
    }

    @Override
    protected void onStop() {
        super.onStop();
        try {
            // make sure you close the socket upon exiting
            ss.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    Handler myUpdateHandler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case MSG_ID:
                // TextView tv = (TextView) findViewById(R.id.TextView01);
                tv.setText(mClientMsg);
                setContentView(tv);
                break;
            default:
                break;
            }
            super.handleMessage(msg);
        }
    };

    class CommsThread implements Runnable {
        public void run() {
            Socket s = null;
            try {
                ss = new ServerSocket(SERVERPORT);
            } catch (IOException e) {
                e.printStackTrace();
            }
            while (!Thread.currentThread().isInterrupted()) {
                Message m = new Message();
                m.what = MSG_ID;
                try {
                    if (s == null)
                        s = ss.accept();
                    BufferedReader input = new BufferedReader(
                            new InputStreamReader(s.getInputStream()));
                    String st = null;
                    st = input.readLine();
                    mClientMsg = st;
                    myUpdateHandler.sendMessage(m);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
               }

私のJavaクライアントプログラムは次のとおりです。

public class TCPSender {
    public static void main(String args[]) {
        try {
            DataInputStream dis = new DataInputStream(System.in);
            System.out.println("Enter the file name:");
            @SuppressWarnings("deprecation")
            String f = dis.readLine();
            File f1 = new File(f);
            FileReader fr = new FileReader(f1);

            Socket s = new Socket("127.0.0.1", 12345);
            PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
            pw.println(f);
            int c = 0;
            while ((c = fr.read()) != -1)
                pw.println(c);
            System.out.println("File content are sent....");
            fr.close();
            s.close();
        } catch (Exception e) {
            System.out.println("" + e);
        }
    }
}
4

0 に答える 0