0
こんにちは、私は、サーバーにメッセージを送信し、返信を返すと思います。私はfailed 1recvfrom failed: EBADF (Bad file descriptor)
エラーを取得し続け、私はこのソケットのものに新しいです。うまくいけば誰かが私を助けることができます。ソケットを使用してサーバーからメッセージを送受信する方法は?
private class SendDataAsyncTask extends AsyncTask<Void,Void,Void>
{
private String reply = "";
@Override
protected Void doInBackground(Void... params)
{
try {
Socket socket = new Socket("ip",portNumber);
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
//printWriter.write("hello there");
printWriter.println("hello there");
bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
printWriter.flush();
reply = bufferedReader.readLine();
if(reply != null && !reply.equals(""))
{
Log.d(SOCKET_TESTING_TAG,"my message is " + reply);
}
else
{
Log.d(SOCKET_TESTING_TAG,"no message yet");
}
Log.d(SOCKET_TESTING_TAG,"break 3");
printWriter.close();
}
catch (IOException e)
{
Log.d(SOCKET_TESTING_TAG,"failed " + e.getMessage());
e.printStackTrace();
}
return null;
}
@Override
public void onPostExecute(Void var)
{
tv_response.setText(reply);
}
}
- 注:ここでは私の非同期タスクの声明は、私はまだエラーを取得
printWriter.flush()
前にヌルのreadlineをチェックする場合、私は置くとき。他のストリームとソケットを閉じたソケットの入力または出力ストリームを閉じる
質問で自分のコードを更新しました。私は 'reply'変数にbufferedReader.readLine()を格納しました。しかし、返信変数を設定した後のLOGステートメントは実行されず、なぜ私はこれを正しく書いたかったのか分からない。 – TheQ
おそらく 'printWriter.write()'の代わりに 'printWriter.println()'を使う必要があります。おそらく、相手も行を読んでいるので、あなたはそれを送信していません。 – EJP
printWriterには、私のアンドロイドスタジオコンパイラで見られるようなprintln()メソッドがありません。そして、私はあなたが「ピアもラインを読んでいて、それを送っていない」と言ったときは分かりません。明確にすることができますか? – TheQ