在code插座ClientSocket的=新的Socket();在崩溃的Android应用。为什么? [英] The code Socket clientSocket = new Socket(); crashes in android app. Why?
问题描述
我使用的是标准的客户端code将字符串发送到我的服务器。它完美的作品,当我运行从Eclipse的Java项目,但是当我运行通过一个按钮一样code在我的Android应用程序这是行不通的。调试后,我得到了在我行尝试code崩溃
插座ClientSocket的=新的Socket(192.168.1.91,6789);
请帮我。
公共无效button2OnClick(查看K){ //测试服务器连接
尝试{ 串句; 串modifiedSentence;
的BufferedReader inFromUser =新的BufferedReader(新的InputStreamReader(System.in));
ClientSocket的插座=新的Socket(192.168.1.91,6789);
Button按钮=(按钮)K;
((按钮)K).setText(完成);
DataOutputStream类outToServer =新的DataOutputStream类(clientSocket.getOutputStream());
的BufferedReader inFromServer =新的BufferedReader(新的InputStreamReader(clientSocket.getInputStream()));
一句话=与Android连接成功;
outToServer.writeBytes(句+的'\\ n');
modifiedSentence = inFromServer.readLine();
clientSocket.close();
}
赶上(例外IO){ }}
由于您从主线程做到这一点,你已经将它移动到一个线程。
新主题(新的Runnable(){
公共无效的run(){
//打开套接字
}
})。开始();
接下来,您必须添加对AndroidManifest上网权限
<使用许可权的android:NAME =android.permission.INTERNET对/>
在Android的,我们可以使用AsyncTask的女巫可以在后台操作完成对主线程执行操作。这将是:
新的AsyncTask<太虚,太虚,太虚>(){ @覆盖
保护无效doInBackground(虚空...... PARAMS){
串modifiedSentence;
的BufferedReader inFromUser =新的BufferedReader(新的InputStreamReader(System.in));
ClientSocket的插座=新的Socket(192.168.1.91,6789);
DataOutputStream类outToServer =新的DataOutputStream类(clientSocket.getOutputStream());
的BufferedReader inFromServer =新的BufferedReader(新的InputStreamReader(clientSocket.getInputStream()));
一句话=与Android连接成功;
outToServer.writeBytes(句+的'\\ n');
modifiedSentence = inFromServer.readLine();
clientSocket.close(); 返回null;
} @覆盖
保护无效onPostExecute(){
super.onPostExecute();
Button按钮=(按钮)K;
((按钮)K).setText(完成);
}
}。执行();
I am using a standard client code to send a string to my server. It works perfect when I am running a java project from eclipse but it doesn't work when I am running the same code via a button on my android application. After debugging I got my try code crashes in the line
Socket clientSocket = new Socket("192.168.1.91", 6789);
Please help me.
public void button2OnClick(View k){
//Testing Server Connection
try{
String sentence;
String modifiedSentence;
BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));
Socket clientSocket = new Socket("192.168.1.91", 6789);
Button button=(Button) k;
((Button) k).setText("Done");
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
sentence = "connection with android successful";
outToServer.writeBytes(sentence + '\n');
modifiedSentence = inFromServer.readLine();
clientSocket.close();
}
catch(Exception IO){
}
}
Because you do it from the main thread, you have move it to a Thread.
new Thread(new Runnable(){
public void run(){
//open socket
}
}).start();
Next you have to add the internet permission on the AndroidManifest
<uses-permission android:name="android.permission.INTERNET" />
In android we can use AsyncTask witch can perform actions on main thread when the background operation is finished. It will be :
new AsyncTask<Void,Void,Void>(){
@Override
protected Void doInBackground(Void... params) {
String modifiedSentence;
BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));
Socket clientSocket = new Socket("192.168.1.91", 6789);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
sentence = "connection with android successful";
outToServer.writeBytes(sentence + '\n');
modifiedSentence = inFromServer.readLine();
clientSocket.close();
return null;
}
@Override
protected void onPostExecute() {
super.onPostExecute();
Button button=(Button) k;
((Button) k).setText("Done");
}
}.execute();
这篇关于在code插座ClientSocket的=新的Socket();在崩溃的Android应用。为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!