アンドロイドには新しく、ソケットプログラミングに関する問題があります。コード上Javaでバイト配列を送受信するソケットプログラミング
class ClientAsycTask extends AsyncTask<String,Void,String>{
ProgressDialog progress;
@Override
protected void onPreExecute() {
progress = new ProgressDialog(MainActivity.this);
progress.setMessage("Connection Server Please wait");
progress.setIndeterminate(true);
progress.show();
}
@Override
protected String doInBackground(String... params) {
String result = null;
Socket socket = new Socket();
String host = "systemteq.gotdns.com";
Integer port = 4999;
DataOutputStream s_out = null;
BufferedReader s_in = null;
try{
socket.connect(new InetSocketAddress(host, port));
s_out = new DataOutputStream(socket.getOutputStream());
s_in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
byte[] messages = new byte[]{0x10,0x01,0x03,0x00,0x00};
s_out.write(messages);
String response;
while((response = s_in.readLine())!=null){
result += response;
}
//result = "Successfully"+s_in.read();//s_in.readLine();
socket.close();
}catch (Exception e){
Toast.makeText(MainActivity.this,"systemteq.gotdns.com:4999 not connected",Toast.LENGTH_SHORT).show();
}
return result;
}
@Override
protected void onPostExecute(String s) {
if(progress.isShowing()){
progress.dismiss();
}
Toast.makeText(MainActivity.this,"Connected "+s,Toast.LENGTH_SHORT).show();
tv.setText(s);
}
}
サーバ、サーバに進コードを送信一部進コードで応答し、10 01 20 10 00 [5バイト]言うことができます。
しかし、上記のコード実行ダイアログは決して閉じることはありません。私はs_in.readLine()には、サーバーからの応答を読み取るいくつかの問題があることがわかりました。
私は多くのリンクを通過しましたが、この問題を解決するには成功しませんでした。親切に私はこれを解読するのに役立ちます。
UPDATE: -
するDataInputStreamを使用した後: -
s_in = new DataInputStream(socket.getInputStream());
byte[] messages = new byte[]{0x10,0x01,0x03,0x00,0x00};
s_out.write(messages);
String response;
System.out.println("START");
result = s_in.readUTF();
それはまだ応答バイトを取ることはありません。リクエストは成功しましたが。
アップデート2
byte m = s_in.readByte();
result = Byte.toString(m);
今バイトの値を取得していますが、私は一つだけを取得しています代わりに5つのバイトを得るための、5つのバイトを取得する必要があります。このことで私を助けてください
はい、試しました。更新された質問を確認してください – RKD
私はreadUTFがreadLineと何をしていると思います – RKD
サーバがあなたにバイトを送るならば、なぜそれらを常にStringとして読むのですか?バイトを[]バッファに読み込みます。容易いものだ。文字列はもっと複雑です。 –