1

私はアンドロイドソケットに問題があります、私は2つのアンドロイドアプリケーションを持っていますServer、そしてServerClientServerClientそれはnullPointerException以下に書かれた2番目の行 を与えます

InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
socket = new Socket(serverAddr, REDIRECTED_SERVERPORT);

serverAddr10.0.2.2であることを確認しましたが、ソケットがnullであることがわかりました。誰かがそれを手伝ってくれる?

編集:このserverAddressを使用すると、到達不能であることがわかりました。おそらく、手動で到達可能にする必要がありますか?ここにソースがあります

*ServerClient*

package com.example.serverclient;

import android.os.Bundle;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.util.Log;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.view.View;
import android.view.Menu;

public class MainActivity extends Activity {

    private Button bt;
    private TextView tv;
    private Socket socket;
    private String serverIpAddress = "10.0.2.2";
    private static final int REDIRECTED_SERVERPORT = 5000;

    // AND THAT'S MY DEV'T MACHINE WHERE PACKETS TO
    // PORT 5000 GET REDIRECTED TO THE SERVER EMULATOR'S
    // PORT 6000

    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       bt = (Button) findViewById(R.id.myButton);
       tv = (TextView) findViewById(R.id.myTextView);
       try {
          InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
          socket = new Socket(serverAddr, REDIRECTED_SERVERPORT);
       } catch (UnknownHostException e1) {
          e1.printStackTrace();
       } catch (IOException e1) {
          e1.printStackTrace();
       }
       bt.setOnClickListener(new OnClickListener() {
          public void onClick(View v) {
             try {
                EditText et = (EditText) findViewById(R.id.EditText01);
                String str = et.getText().toString();
                OutputStream sk = socket.getOutputStream();

                PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
                out.println(str);
                Log.d("Client", "Client sent message");
             } catch (UnknownHostException e) {
                tv.setText("Error1");
                e.printStackTrace();
             } catch (IOException e) {
                tv.setText("Error2");
                e.printStackTrace();
             } catch (Exception e) {
                tv.setText("Error3");
                e.printStackTrace();
             }
          }
       });
    }
}


**Server**
package com.example.myserver;

import android.os.Bundle;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

    ServerSocket ss = null;
       String mClientMsg = "";
       Thread myCommsThread = null;
       protected static final int MSG_ID = 0x1337;
       public static final int SERVERPORT = 6000;

       @Override
       public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv = (TextView) findViewById(R.id.TextView01);
        tv.setText("Nothing from client yet");
        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);
                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();
                }
            }
        }
        }
}
4

3 に答える 3

1

UnknownHostExceptionまたは を取得していないことを確認しましたIOExceptionか? それらの 1 つを呼び出す必要があります。それ以外の場合socketは、null にはなりません。

于 2012-10-16T15:26:37.827 に答える
0

エラー 3 パラの (Exception e) を NullPointerException に変更してから、クライアント側を実行してメッセージを送信します。エラー 3 は画面に表示されなくなり、Myserver にメッセージが表示されます。

例外 e --> NullPointerException

于 2014-02-22T04:53:27.193 に答える