私は現在、Androidに簡単な イメージサーバーを作成する作業を進めています。Android AsyncTaskのjava.net.SocketException
これは...
new Thread(new Runnable()
{
public void run()
{
try
{
ServerSocket serverSocket = new ServerSocket(8080);
while(true)
{
Socket client = serverSocket.accept();
SimpleImageSender sender
= new SimpleImageSender(client);
sender.execute();
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}).start();
サーバ・クラスであり、これはAsyncTaskです。
public class SimpleImageSender extends HttpGetForMapTileHandler<Void,Void,Void>
{
protected Socket client;
public SimpleImageSender(Socket socket)
{
super();
this.client = socket;
}
@Override
protected Void doInBackground(Void... params)
{
try
{
URL url = new URL("http://www.imageFromWeb.png");
HttpURLConnection httpCon = (HttpURLConnection)url.openConnection();
httpCon.setRequestMethod("GET");
httpCon.connect();
if(httpCon.getResponseCode() == 200)
{
DataOutputStream out = new DataOutputStream(this.client.getOutputStream());
byte response[] = new byte[BUFFER_SIZE];
int index = httpCon.getInputStream().read(response,0,BUFFER_SIZE);
while(index != -1)
{
out.write(response,0,index);//***
index = httpCon.getInputStream().read(response,0,BUFFER_SIZE);
}
out.flush();
}
else
{
Log.d("AAA","No png");
}
}
catch(Exception e)
{
e.printStackTrace();
cancel(true);
}
return null;
}
}
私は、Android 6.0(ネクサス5)でこのコードをテストし、java.net.SocketExceptionがライン//***
が3回以上呼ば occers。
これは私が持っているコールスタックです。
09-06 18:03:42.763 20730-22167/com.example.SimpleImageSenderServer
W/System.err: java.net.SocketException: sendto failed: ECONNRESET
(Connection reset by peer)
09-06 18:03:42.763 20730-22167/com.example.SimpleImageSenderServer
W/System.err: at
libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:542)
09-06 18:03:42.763 20730-22167/com.example.SimpleImageSenderServer
W/System.err: at libcore.io.IoBridge.sendto(IoBridge.java:511)
09-06 18:03:42.764 20730-22167/com.example.SimpleImageSenderServer
W/System.err: at
java.net.PlainSocketImpl.write(PlainSocketImpl.java:500)
09-06 18:03:42.764 20730-22167/com.example.SimpleImageSenderServer
W/System.err: at java.net.PlainSocketImpl.-
wrap1(PlainSocketImpl.java)
09-06 18:03:42.764 20730-22167/com.example.SimpleImageSenderServer
W/System.err: at
java.net.PlainSocketImpl$PlainSocketOutputStream.
write(PlainSocketImpl.java:266)
09-06 18:03:42.764 20730-22167/com.example.SimpleImageSenderServer
W/System.err: at
java.io.DataOutputStream.write(DataOutputStream.java:98)
09-06 18:03:42.765 20730-22167/com.example.SimpleImageSenderServer
W/System.err: at
com.example.SimpleImageSenderServer.
SimpleImageSender.doInBackground(SimpleImageSender.java:xx)
はまた、私は
- でのAndroid 4.4.2、5.0デバイスをテストしたときに、このエラーが発生しなかったことをimformたいです。
- 仮想デバイス(Android 7.0)。
私は インターネットを通じてjava.net.SocketExceptionが問題をチェックしますが、私は、原因だったもの をそれを把握することができませんでした。
アドバイスは非常に役に立ちます。 ありがとう
実際に '接続リセット'が発生しますか? – EJP
他の解決方法もありますが([https://stackoverflow.com/questions/36871636/java-net-socketexception-sendto-failed-econnreset-connection-reset-by-peer) //stackoverflow.com/questions/11207394/getting-socketexception-connection-reset-by-peer-in-android) – Zoe