Aynı sorunla ilgili birçok gönderi okudum, BufferedReader.readLine()
satırlarını okuduğumuzdan, sunucudan "\n"
göndermek zorundayız, böylece android istemciyi yeni bir satır olarak aldık. Ama benim problemim, masaüstü kodumla iletişim kurduğundan ve zaten kodlanmış olduğundan sunucu kodumu değiştiremem. İletiyi sunucudan "\n"
eklemeden okumak için herhangi bir yolu var mı?Android: Sunucudan ileti almayan soket istemcisi
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);
}
}
Android client class
(Python)
mesajı alıyorum nasıl diğer istemcisi.
data = self.sock.recv(1024)
Ne sunucu gönderme komutları sonunda herhangi bir satır ara vermeden saniyede @alarm:On#, @alarm:Off#
4 komutlardır.
Diğer istemci nasıl yapıyor? Protokol önceden tanımlanmış olmalıdır. Sadece onu uygulayın. Buradaki hiç kimse kendi protokolünüzü anlatamaz. Kod olmayan metin için kod formatlama kullanmayın. – EJP
Diğer istemci python'dadır ve self.sock.recv (1024) –
'u kullanarak verileri alacaktır. Şüphesiz ki, bunun için şüphe duyuyorum, bu durumda neden aynı şeyi yapamazsınız? – EJP