将数据从android传输到java桌面应用程序
问题描述:
我在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();
}
}
});
}
}
答
使用该PC端获取其IP:
String IPfromPC = InetAddress.getLocalHost().getHostAddress();
使用IP在您的Andoid应用:
mSocket.connect(new InetSocketAddress(IPfromPC, 4444), 5000);
我尝试这样做:这是给同样的错误.. String IPfromPC = InetAddress.getLocalHost()。getHostAddress(); client = new Socket(IPfromPC,4444); //连接到服务器 – user3316775
错误消息: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
我在AsyncTask线程上做所有套接字的东西。你不能在主线程上做到这一点。 –