クライアントのように動作するアンドロイドアプリケーションを作成しようとしていますが、私が直面している問題はサーバーから文字列データを受け取っている間にアプリケーションが初めて受信することです。そして、ソケットを再接続すると、アプリケーションは再びデータを受信します。BufferedReader.readline()は一度しか動作しません
私はサーバーとしてソケットプロトコルappを使用しています。メッセージの最後に改行文字を送信しています。データをサーバーに送り返すことができるので、接続さえも有効です。
は、ここで私は接続を作成]ボタンをクリックしたときに
public class MainActivity extends AppCompatActivity {
Thread m_thread;
Socket clientSocket;
PrintWriter out;
boolean fan=false,socket=false,light1=false,light2=false,m_run=false;
int quantity = 0;
String msg;
BufferedReader in = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void Start(View view) {
m_thread = new Thread(new Runnable() {
@Override
public void run() {
m_run = true;
try {
clientSocket = new Socket("192.168.1.34", 2001);
try {
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream())));
out.println("Client Connected");
out.flush();
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
TextView srv_message = (TextView) findViewById(R.id.messageTextView);
while(m_run)
{
if(msg!=null)
{
srv_message.setText(""+msg);
}
msg = null;
}
}catch (Exception e){
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
m_thread.start();
}
Startメソッドが呼び出されたコードです。このコードを使用し
あなたのコードは、サーバアプリは二回メッセージを受信し、別のものがある –
動作します。それは "クライアント接続"を2回受け取ります。あなたはいくつかの変更を提案することができます –
私は同じ問題に直面していたこのリンクに従ってください:https://www.youtube.com/watch?v=QVq2IGg5ZFM –