【发布时间】:2015-07-06 15:06:55
【问题描述】:
我在设置 Socket 连接时遇到了一些问题。
根据我的发现,构造函数Socket(InetAddress dstAddress, int dstPort)不能在main线程中使用。
这是我尝试过的:
在CreateSocketTask.java
public class CreateSocketTask extends AsyncTask<InetAddress,Void,Socket>{
<...>
@Override
protected Socket doInBackground(InetAddress... params) {
try
{
socket = new Socket(params[0], port);
return socket;
} catch(ConnectException e) {
Log.e("SocketClient", "Error", e);
return null;
} catch(IOException e) {
Log.e("SocketClient", "Error", e);
return null;
}
}
protected void onPostExecute() {
}
}
然后在我的 SocketClient.java 中:
public class SocketClient implements Runnable{
<...>
public void run()
{
try
{
InetAddress serverAddress = InetAddress.getByName(serverIp);
new CreateSocketTask().execute(serverAddress);
try {
/*Here, I want to retrieve the result of my CreateSocketTask to use it in my new Thread, I tried CreateSocketTask.get() but without any success*/
new Thread(new SocketReader(new BufferedReader(new InputStreamReader(socket.getInputStream())), observerList)).start();
}
如何设置套接字连接?
这行得通吗?
我可以简单地创建一个新线程来执行我的 Socket 创建,而不是创建一个服务吗?像这样:
Thread SocketThread =new Thread(new Runnable() {
@Override
public void run() {
try {Socket socket = new Socket(serverAddress,port);}
catch (IOException e){}
}
});
SocketThread.run();
try {
new Thread(new SocketReader(new BufferedReader(new InputStreamReader(socket.getInputStream())), observerList)).start();
}
【问题讨论】:
-
你能发布你的整个错误日志吗?
-
你遇到了什么错误?
-
/*在这里,我想检索我的 CreateSocketTask 的结果以在我的新线程中使用它,我尝试了 CreateSocketTask.get() 但没有任何成功*/。那确实是错误的地方。您应该在 CreateSocketTask 的 onPostExecute 中执行此操作。
-
我得到一个 android.os.NetworkOnMainThreadException 错误
标签: java android sockets android-asynctask