2014-02-16 197 views
0

我在Android中運行應用程序並將字符串值作爲答案。現在我想將這個結果傳遞給位於本地主機上的Java服務器,即將Android代碼的值傳遞給Java桌面應用程序。將數據從android傳輸到java桌面應用程序

我試過使用這段代碼,但是當我運行客戶端時,它說不幸應用程序停止了。

它說:

android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145) 
libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84) 
libcore.io.IoBridge.connectErrno(IoBridge.java:127) 

我來自的地方,我需要使用asynctask爲它找到。你能指導我如何在這裏使用asynctask嗎?

IP地址是我的本地主機的IP和端口號是任何隨機數。

我嘗試運行服務器,然後運行客戶端。我甚至嘗試在仿真器和實際設備上運行客戶端。應用程序關閉。我是Android新手。我做錯了什麼?

下面是客戶端的代碼:

package com.example.client; 

    import java.io.IOException; 
    import java.io.PrintWriter; 
    import java.net.Socket; 
    import java.net.UnknownHostException; 


    public class MainActivity extends Activity { 

    private Socket client; 
    private PrintWriter printwriter; 
    private EditText textField; 
    private Button button; 
    private String messsage; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    textField = (EditText) findViewById(R.id.editText1); //reference to the text field 
    button = (Button) findViewById(R.id.button1); //reference to the send button 

    //Button press event listener 
    button.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View v) { 

    messsage = textField.getText().toString(); //get the text message on the text field 
    textField.setText(""); //Reset the text field to blank 

    try { 

    client = new Socket("10.0.2.2", 4444); //connect to server 
    printwriter = new PrintWriter(client.getOutputStream(),true); 
    printwriter.write(messsage); //write the message to output stream 

    printwriter.flush(); 
    printwriter.close(); 
    client.close(); //closing the connection 

    } catch (UnknownHostException e) { 
    e.printStackTrace(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
    } 
    }); 
    }} 

而這裏的服務器的代碼:

public class server { 

    private static ServerSocket serverSocket; 
    private static Socket clientSocket; 
    private static InputStreamReader inputStreamReader; 
    private static BufferedReader bufferedReader; 
    private static String message; 

    public static void main(String[] args) { 

    try { 
    serverSocket = new ServerSocket(4444); //Server socket 

    } catch (IOException e) { 
    System.out.println("Could not listen on port: 4444"); 
    } 

    System.out.println("Server started. Listening to the port 4444"); 

    while (true) { 
    try { 

    clientSocket = serverSocket.accept(); //accept the client connection 
    inputStreamReader = new InputStreamReader(clientSocket.getInputStream()); 
    bufferedReader = new BufferedReader(inputStreamReader); //get the client message 
    message = bufferedReader.readLine(); 

    System.out.println(message); 
    inputStreamReader.close(); 
    clientSocket.close(); 

    } catch (IOException ex) { 
    System.out.println("Problem in message reading"); 
    } 
    } 

    } 
    } 

的異步任務代碼:

包com.example.client;

public class MainActivity extends Activity { 
    private Socket client; 
    private PrintWriter printwriter; 
    private EditText textField; 
    private Button button; 
    private String messsage; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    textField = (EditText) findViewById(R.id.editText1); //reference to the text field 
    button = (Button) findViewById(R.id.button1); //reference to the send button 

    //Button press event listener 
    button.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View v) { 

    messsage = textField.getText().toString(); //get the text message on the text field 
    textField.setText("");  //Reset the text field to blank 

    try { 

    client = new Socket("134.190.162.165", 44440); //connect to server 
    printwriter = new PrintWriter(client.getOutputStream(),true); 
    printwriter.write(messsage); //write the message to output stream 

    printwriter.flush(); 
    printwriter.close(); 
    client.close(); //closing the connection 

    } catch (UnknownHostException e) { 
    e.printStackTrace(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
    } 
    }); 

    } 


} 

回答

0

使用該PC端獲取其IP:

String IPfromPC = InetAddress.getLocalHost().getHostAddress(); 

使用IP在您的Andoid應用:

mSocket.connect(new InetSocketAddress(IPfromPC, 4444), 5000); 
+0

我嘗試這樣做:這是給同樣的錯誤.. String IPfromPC = InetAddress.getLocalHost()。getHostAddress(); client = new Socket(IPfromPC,4444); //連接到服務器 – user3316775

+0

錯誤消息:android.os.NetworkOnMainThreadException android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) java.net.InetAddress.lookupHostByName(InetAddress.java:391) java.net.InetAddress.getLocalHost(InetAddress.java:371) – user3316775

+0

我在AsyncTask線程上做所有套接字的東西。你不能在主線程上做到這一點。 –

相關問題