私は同じ問題で多くの投稿を読んでいます。つまり、BufferedReader.readLine()
という行を読んでいるので、サーバから"\n"
を送信してアンドロイドのクライアントが新しい行になるようにしてください。しかし、私の問題は、デスクトップアプリケーションと通信しているときにサーバーコードを変更することができず、既にコード化されていることです。 "\n"
を追加せずにサーバーからメッセージを読み取る方法はありますか?メッセージを取得しているどのように他のクライアント(Python)
Android:サーバからのメッセージを受信していないソケットクライアント
Android client class
public class TCPClient {
private String serverMessage;
public static String SERVERIP = "192.168.0.1"; // controllers IP address
public static final int SERVERPORT = 10001;
private OnMessageReceived mMessageListener = null;
private boolean mRun = false;
private PrintWriter out = null;
private BufferedReader in = null;
public TCPClient(final OnMessageReceived listener)
{
mMessageListener = listener;
}
/**
* Sends the message entered by client to the server
* @param message text entered by client
**/
public void sendMessage(String message)
{
if (out != null && !out.checkError())
{
System.out.println("message: "+ message);
out.println(message);
out.flush();
}
}
public void stopClient()
{
mRun = false;
}
public void run() {
mRun = true;
try {
if(!MainActivity.STATIC_IP.equals(""))
{
SERVERIP = MainActivity.STATIC_IP;
}
InetAddress serverAddr = InetAddress.getByName(SERVERIP);
Log.e("TCP SI Client", "SI: Connecting...");
Socket socket = new Socket(serverAddr, SERVERPORT);
try {
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
Log.e("TCP SI Client", "SI: Sent.");
Log.e("TCP SI Client", "SI: Done.");
Log.e("Out Message",out.toString());
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (mRun)
{
serverMessage = in.readLine();
if (serverMessage != null && mMessageListener != null) {
mMessageListener.messageReceived(serverMessage);
Log.e("RESPONSE FROM SERVER", "S: Received Message: '" + serverMessage + "'");
}
serverMessage = null;
}
}
catch (Exception e)
{
Log.e("TCP SI Error", "SI: Error", e);
e.printStackTrace();
}
finally
{
socket.close();
}
} catch (Exception e) {
Log.e("TCP SI Error", "SI: Error", e);
}
}
public interface OnMessageReceived {
public void messageReceived(String message);
}
}
。
data = self.sock.recv(1024)
何サーバーの送信コマンドは、最後に任意の改行なしの毎秒@alarm:On#, @alarm:Off#
4コマンドです。
他のクライアントはどうしますか?プロトコルはすでに定義されていなければなりません。ちょうどそれを実装します。ここに誰も自分のプロトコルについて教えてくれる人はいません。コードではないテキストにはコード書式を使用しないでください。 – EJP
他のクライアントはPythonであり、self.sock.recv(1024) –
を使用してデータを取得します。これがあれば、私は疑いますが、なぜこの場合は同じことをすることはできませんか? – EJP