1

ネットワークに問題があります...

        protected Void doInBackground(Void... arg0) {
        int nreq = 1;
        System.out.println("Hall000");
        try {
            ServerSocket sock = new ServerSocket(6677);
            sock.setReuseAddress(true);
            sock.setSoTimeout(1000);
                Socket newsock = sock.accept();
                System.out.print("\n");
                System.out.println("Creating command...");
                System.out.print("\n");
                new answercall();

                nreq++;
                System.out.println(nreq);
                final DataInputStream din = new DataInputStream(
                        ss.getInputStream());
                // Einlesen
                diny1 = (din).read();
                diny2 = (din).read();
                diny3 = (din).read();
                diny4 = (din).read();
                diny5 = (din).read();
                diny6 = (din).read();
                diny7 = (din).read();
                System.out.println("diny" + diny1 + " " + diny2 + " "
                        + diny3 + " " + diny4 + " " + diny5 + " " + diny6
                        + " " + diny7);
                setDiny1(diny1);
                setDiny2(diny2);
                setDiny3(diny3);
                setDiny4(diny4);
                setDiny5(diny5);
                setDiny6(diny6);
                setDiny7(diny7);
                System.out.println(diny1 + " " + diny2 + " " + diny3 + " "
                        + diny4 + " " + diny5 + " " + diny6 + " " + diny7
                        + " " + diny8);
                getSharedPreferences(DINY, MODE_PRIVATE).edit()
                        .putInt(DINY1, diny1).commit();
                getSharedPreferences(DINY, MODE_PRIVATE).edit()
                        .putInt(DINY2, diny2).commit();
                getSharedPreferences(DINY, MODE_PRIVATE).edit()
                        .putInt(DINY3, diny3).commit();
                getSharedPreferences(DINY, MODE_PRIVATE).edit()
                        .putInt(DINY4, diny4).commit();
                getSharedPreferences(DINY, MODE_PRIVATE).edit()
                        .putInt(DINY5, diny5).commit();
                getSharedPreferences(DINY, MODE_PRIVATE).edit()
                        .putInt(DINY6, diny6).commit();
                getSharedPreferences(DINY, MODE_PRIVATE).edit()
                        .putInt(DINY7, diny7).commit();


        } catch (Exception e) {
            System.out.println("IO error" + e);
        }
        return null;

    }

LogCat は次のように教えてくれます。

IO エラーjava.net.BindException: バインドに失敗しました: EADDRINUSE (アドレスは既に使用されています)

私はそれが何を意味するかは知っていますが、なぜそれが来るのかわかりません... 私は再利用を使用しているので、来るべきではありませんか? 私は何を間違えましたか?

4

1 に答える 1

3

のドキュメントからServerSocket:

ソケットがバインドされた後に SO_REUSEADDR が有効または無効になったときの動作 (isBound() を参照) は定義されていません。

バインドせずにソケットを作成し、SO_REUSEADDR後で設定してバインドする必要があります。

ServerSocket sock = new ServerSocket();
sock.setReuseAddress(true);
sock.bind(new InetSocketAddress(6677));

PS: あなたの質問を改善するのを妨げようとするとき、喜んで助けてくれる人の数を最小限に抑えます。

于 2013-01-22T11:52:58.233 に答える