2

我无法将我的安卓模拟器连接到我的电脑。我可以将信息发送到 android,但是发送回来时它就失败了。

这是我到目前为止所拥有的:

public class sendDataToRegion extends AsyncTask<String,Void,List<String> >{

        final TextView who = (TextView)findViewById(R.id.txtWho);
        final TextView what = (TextView)findViewById(R.id.txtWhat);
        final TextView when = (TextView)findViewById(R.id.txtWhen);
        final TextView where = (TextView)findViewById(R.id.txtWhere);
        final TextView actionTaken = (TextView)findViewById(R.id.txtActionTaken);
        final TextView lengthOfTime = (TextView)findViewById(R.id.txtLengthOfTime);

        public List<String> dataSend2 = new ArrayList<String>();


        @Override
        protected List<String> doInBackground(String... params) {
            try
            {
                System.out.println("Mobile Server Program");

                String whoString = who.getText().toString();
                String whatString = what.getText().toString();
                String whenString = when.getText().toString();
                String whereString = where.getText().toString();
                String actionString = actionTaken.getText().toString();
                String lengthString = lengthOfTime.getText().toString();

                dataSend2.add(whoString);
                dataSend2.add(whatString);
                dataSend2.add(whenString);
                dataSend2.add(whereString);
                dataSend2.add(actionString);
                dataSend2.add(lengthString);


                int port = 4444;

                ServerSocket server = new ServerSocket(port);

                Socket socket=server.accept();

                DataOutputStream network = new DataOutputStream(socket.getOutputStream());


                for(int i = 0; i< dataSend2.size();i++){
                    network.writeUTF(dataSend2.get(i));
                }


            }
            catch (Exception e) {

            Log.e("TCP", "S: Error", e);

            }

            return dataSend2;
        }

        protected void onPostExecute( ) {
            System.out.println("Thread Finished " + dataSend2.size());


        }

    }//End of inner class

它甚至可以创建服务器套接字,但之后就没有了。有人能指出我正确的方向吗?

谢谢

更新

这是客户:

try
        {

            String ip = "146.176.230.192";
            System.out.println("IP connected");

            int port = 4444;
            System.out.println("port connected");

            // Connect to the server
            Socket sock = new Socket(ip, port);
            System.out.println("socket created");

            // Create the incoming stream to read messages from
            DataInputStream network = new DataInputStream(sock.getInputStream());

            // Display our address
            System.out.println("Address: " + sock.getInetAddress());
            String line;

            while ((line = network.readUTF()) != null)
            {


                System.out.println(line);
            }



            sock.close();
        }
        catch (IOException ioe)
        {
            System.out.println("Connection failed");


        }
4

1 回答 1

3

7612在运行程序之前,使用 port并运行此命令来转发端口:

adb forward tcp:7612 tcp:7612

客户端:默认IP:127.0.0.1

服务器端:IP地址为通配符地址

服务器端:

    private ServerThread mServer;
    ....
    java.net.ServerSocket s = new java.net.ServerSocket();

// bind, only port used 
java.net.InetSocketAddressendPoint = new InetSocketAddress(port);


  if( !s.isBound() ){
    s.bind(7612);
  }
      ....

客户端

 private           Socket mSocket;
 private static final int mConnectTimeout = 2500; // 2.5 seconds

 ....
 mSocket = new Socket();
 InetSocketAddress remoteAddr = new InetSocketAddress(127.0.0.1, 7612); 
    mSocket.connect(remoteAddr, mConnectTimeout); 
 ....

服务器线程类

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;



public class ServerThread implements Runnable{
public ServerThread(ServerSocket socket, OnConnectItf onConnect) // OnConnectItf is some callback
   {
    mServer   = socket;
    mCallback  = onConnect;
    mCancel    = false;
}

public void cancel(){
    mCancel = true;
}


public void run() {
    while (true){
        try {
            Socket s = mServer.accept();
            if (mCancel == true) break;

             ....
        }
        catch (IOException e) {
            // optional: implement on error handler
            break;
        }
    }

    return;
}

private ServerSocket mServer;
private OnConnectItf mCallback;
private boolean      mCancel;

}

于 2012-11-15T16:03:42.593 回答