绑定Android服务中的套接字
我有一个必须等待服务器命令的服务。现在我需要创建一个从开始到服务生命周期结束的套接字。我想在onCreate方法中使用它,并将套接字保存在私有变量中,然后在BindService中使用它,但它不起作用。我的错误在哪里?错误在哪里?谢谢大家绑定Android服务中的套接字,android,sockets,service,Android,Sockets,Service,我有一个必须等待服务器命令的服务。现在我需要创建一个从开始到服务生命周期结束的套接字。我想在onCreate方法中使用它,并将套接字保存在私有变量中,然后在BindService中使用它,但它不起作用。我的错误在哪里?错误在哪里?谢谢大家 package com.example.testercomunicationandroidservlet; import java.io.DataInputStream; import java.io.DataOutputStream; import jav
package com.example.testercomunicationandroidservlet;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.provider.ContactsContract.Contacts.Data;
import android.telephony.TelephonyManager;
import android.util.Log;
public class BindService extends Service {
public BindService() {
// TODO Auto-generated constructor stub
}
@Override
public IBinder onBind(Intent arg0)
{
// TODO Auto-generated method stub
return null;
}
public void onCreate()
{
try {
Log.i("BindService", "Service Started");
this.socket = new Socket("10.0.2.2", 1500);
this.input = new DataInputStream(this.socket.getInputStream());
this.output = new DataOutputStream(this.socket.getOutputStream());
Log.i("Test Server/Android Communication", "Socket: " + this.socket.getInetAddress().toString());
TelephonyManager tm= (TelephonyManager) getSystemService(this.TELEPHONY_SERVICE);
this.output.writeUTF(tm.getDeviceId());
Log.i("Inviato IMEI: ", tm.getDeviceId());
}
catch (UnknownHostException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private Socket socket;
private DataInputStream input;
private DataOutputStream output;
}
LogCat
11-18 15:21:22.633: E/TCP(295): C: Error
11-18 15:21:22.633: E/TCP(295): java.net.SocketException: The operation timed out
11-18 15:21:22.633: E/TCP(295): at org.apache.harmony.luni.platform.OSNetworkSystem.connectStreamWithTimeoutSocketImpl(Native Method)
11-18 15:21:22.633: E/TCP(295): at org.apache.harmony.luni.platform.OSNetworkSystem.connect(OSNetworkSystem.java:115)
11-18 15:21:22.633: E/TCP(295): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:244)
11-18 15:21:22.633: E/TCP(295): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:219)
11-18 15:21:22.633: E/TCP(295): at java.net.Socket.startupSocket(Socket.java:781)
11-18 15:21:22.633: E/TCP(295): at java.net.Socket.<init>(Socket.java:316)
11-18 15:21:22.633: E/TCP(295): at com.example.betacomunicate_clientandroid.TCPClient.run(TCPClient.java:53)
11-18 15:21:22.633: E/TCP(295): at com.example.betacomunicate_clientandroid.MyActivity$connectTask.doInBackground(MyActivity.java:89)
11-18 15:21:22.633: E/TCP(295): at com.example.betacomunicate_clientandroid.MyActivity$connectTask.doInBackground(MyActivity.java:1)
11-18 15:21:22.633: E/TCP(295): at android.os.AsyncTask$2.call(AsyncTask.java:185)
11-18 15:21:22.633: E/TCP(295): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
11-18 15:21:22.633: E/TCP(295): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-18 15:21:22.633: E/TCP(295): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
11-18 15:21:22.633: E/TCP(295): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
11-18 15:21:22.633: E/TCP(295): at java.lang.Thread.run(Thread.java:1096)
你确定:
android和服务器都在同一个网络上?它们位于同一个lan上,具有不隔离DHCP客户端的根用户
安卓已接入互联网adb shell ping kde.org
安卓真的可以到达服务器吗?亚洲开发银行壳牌telnet 10.02.2.2 1500
10.0.2.2:1500上有服务器吗?从您的计算机上使用浏览器或telnet 10.02.2.2 1500查看
到目前为止唯一的错误是android无法连接到您的服务器
最后,但这更多的是一种设计选择,你确定要使用这样一个定制的协议吗?什么都不像HTTP/REST/JSON/PROTOBUF