gpt4 book ai didi

java - AsyncTask 创建一个 Socket

转载 作者:行者123 更新时间:2023-11-29 05:03:26 24 4
gpt4 key购买 nike

我在设置 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();
}

如何设置套接字连接?


这行得通吗?

我可以不创建服务,而是简单地创建一个新线程来执行我的套接字创建吗?像那样:

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();
}

最佳答案

不要使用 AsyncTask ,这个类的目的是根据文档“用于短时间操作(最多几秒钟)”做很少的工作

所以你最好实现一个服务来处理你的 I/O 请求 http://developer.android.com/guide/components/services.html

关于java - AsyncTask 创建一个 Socket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31249313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com