Android 通过 TCP/IP 连接到计算机 [英] Android to computer via TCP/IP

查看:37
本文介绍了Android 通过 TCP/IP 连接到计算机的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在将我的 android 模拟器连接到我的计算机时遇到问题.我可以向android发送信息,但发送回时却失败了.

I am having trouble connecting my android emulator to my computer. I can send information to the android but when sending back it just fails.

这是我目前所拥有的:

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

它已经创建了服务器套接字,但之后什么也没有.有人能指出我正确的方向吗?

And it gets as far as creating the server socket, but nothing after that. Could someone point me in the right direction?

谢谢

更新

这里是客户:

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");


        }

推荐答案

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

use port 7612 and run this command to forward ports before you run your program:

adb forward tcp:7612 tcp:7612

客户端:默认IP:127.0.0.1

Client side: default IP: 127.0.0.1

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

Server side: IP address is the wildcard address

服务器端:

    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); 
 ....

ServerThread 类

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;

}

这篇关于Android 通过 TCP/IP 连接到计算机的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆