Я хочу создать очень простой клиент-сервер TCP / IP с устройством Android, являющимся клиентом, и Arduino, являющимся сервером.
Так вот мой код:
public class MainActivity extends AppCompatActivity {
private Socket socket;
private static final int SERVERPORT = 80;
private static final String SERVER_IP = "192.168.1.141";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new ClientThread()).start();
}
public void onClick(View view){
try {
TextInputLayout input1 = (TextInputLayout) findViewById(R.id.input1);
String str = input1.getEditText().getText().toString();
PrintWriter out = new PrintWriter(this.socket.getOutputStream(), true);
out.println(this.socket.getInetAddress().toString());
out.flush();
}
catch(IOException e) {
e.printStackTrace();
}
}
class ClientThread implements Runnable{
@Override
public void run(){
try{
InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
socket = new Socket(serverAddr, SERVERPORT);
}
catch(UnknownHostException e1){
e1.printStackTrace();
}
catch(IOException e2){
e2.printStackTrace();
}
}
}
}
Телефон может подключиться к серверу, когда я загружаю приложение (я вижу его на серийном мониторе Arduino), но когда я нажимаю на кнопку, происходит сбой из-за предположительно класса PrintWriter.
Странно то, что если я печатаю сообщение из метода run () в классе ClientThread, то сообщение отправляется нормально.
Странно, что приложение не падает, когда я запускаю его через AndroidСтудийный эмулятор, но он работает на реальном устройстве.
Проблема связана с комбинацией слушателя onClick и PrintWriter, но я просто не понимаю, почему именно.