私はアンドロイドのJavaでTCPクライアントをコーディングしようとしています。ほとんどの場合、大丈夫です。しかし、私は1つの問題があります。ソケットが接続されていて、remeoteホストがシャットダウンしたり、ネットワークが停止したりすると、socket.getinputstreamはブロックを維持します。Android、Java、ソケット、リモートホストの接続を切断する
ソケットがまだ接続されているかどうかわかりません。私は客観的なCのコードを、また目的では、ソケットが強制的にシャットダウンして再接続しようとするイベントを取得します。したがって、客観的なcでは、ソケットは状態を追跡します。
javaでは、ソケットと入力ストリームは、ソケットがダウンしていても接続されているかブロックされています。ソケットがまだ接続されているかどうかをどうやって確認できますか?
@Override
protected Void doInBackground(String... params) {
try {
String host = params[0];
int port = Integer.parseInt(params[1]);
SocketAddress sockaddr = new InetSocketAddress(host, port);
Socket socket = new Socket();
socket.connect(sockaddr,5000);
socket.setSoTimeout(7000);
out = new PrintWriter(socket.getOutputStream(), true);
mBufferIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (mRun) {
try {
-----> mServerMessage = mBufferIn.readLine();
}catch (Exception e){
Log.d("my","hier3" + e.getMessage());
}
if (mServerMessage.trim() != null) {
sender.messageReceived(s2);
}else{
}
}
}
} catch (UnknownHostException e
) {