Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android中的多线程服务器套接字用于从连接的客户端接收图像-不工作_Java_Android_Multithreading_Sockets_Android Asynctask - Fatal编程技术网

Java android中的多线程服务器套接字用于从连接的客户端接收图像-不工作

Java android中的多线程服务器套接字用于从连接的客户端接收图像-不工作,java,android,multithreading,sockets,android-asynctask,Java,Android,Multithreading,Sockets,Android Asynctask,当客户端连接到服务器时,它们应该能够向服务器发送图像,以便服务器能够显示接收到的图像。我在服务器端使用了一个异步任务来完成这项任务 当一个客户端连接到服务器时,一切正常,图像从该客户端接收,但当连接的下一个客户端不工作时,有时第一个客户端断开连接,或者图像没有从一个或两个客户端接收 有人能帮我吗?我做错什么了吗 服务器端异步任务 我认为您所需要的只是更改这些行: w = new ClientWorker(serverSocket.accept(),f); Thread

当客户端连接到服务器时,它们应该能够向服务器发送图像,以便服务器能够显示接收到的图像。我在服务器端使用了一个异步任务来完成这项任务

当一个客户端连接到服务器时,一切正常,图像从该客户端接收,但当连接的下一个客户端不工作时,有时第一个客户端断开连接,或者图像没有从一个或两个客户端接收

有人能帮我吗?我做错什么了吗

服务器端异步任务


我认为您所需要的只是更改这些行:

 w = new ClientWorker(serverSocket.accept(),f);
             Thread t = new Thread(w);
              t.start();
              return f.getAbsolutePath();
您的问题是,在第一个客户端连接后,您将离开doInbackground。您必须使用onProgressPublish()发送中间结果,并保持循环状态,不要关闭服务器


所以,在您连接到第一个客户机并将其发送到您创建的套接字之后,通过返回f.getAbsolutePath()退出主循环;然后从服务器中退出。除了用于发送中间结果的函数(onProgressPublish())之外,所有代码都是正确的

值得一读的帖子@谢谢你的回答。我知道为什么现在不行了。你能看看我在第一个答案中添加的评论并给我一些建议吗,我真的很感激!如果您使用相同的
文件调用
newfileoutputstream
,则无需调用
File.createNewFile()
,事实上这是一种浪费。谢谢您的回答。现在我知道它为什么不能正常工作了。既然并发异步任务的数量是一个,那么什么是合适的替代方法呢?如果我实现了服务器套接字创建到线程创建部分,在那里我最初实现了异步任务执行,该怎么办?然后删除异步任务并将Clientworker公开。这可以吗?嘿,一个简单的问题,我如何区分接收图像和服务器端的字符串?如果我是正确的,我需要两个处理程序来处理这两个任务,那么我如何确定我收到的是字符串还是图像?他将无法正确运行第二个异步任务,因为端口8988将很忙。@Vetall感谢您的回复,所以,如果我使用一个不同的端口,比如8080作为字符串,8988作为图像,这样可以吗?我真的很抱歉我的错误,你可以惩罚我,不要接受我的答案,投票否决我
 w = new ClientWorker(serverSocket.accept(),f);
             Thread t = new Thread(w);
              t.start();
              return f.getAbsolutePath();