Написал простой сервер с помощью сокетов. Его цель принимать данные от пользователя и отправлять их обратно Клиент я написал в Android Studio, прием-передача (общение с сервером) вынесены в отдельные потоки Thread. По отдельности и отправка и прием сообщений работают, но когда хочу и слушать сервер (в бесконечном цикле) и отправлять ему данные - приложение вылетает. Вот код клиента (без импортов):
public class MainActivity extends AppCompatActivity {
Handler h;
public String message;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
el = (EditText) findViewById(R.id.editText);
h = new Handler(); //Handler нужен для вывода ответа сервера на экран
t.start(); //Запуск потока прослушивания ответа
}
По нажатию на кнопку вызывается этот метод, который запускает поток send в котором и должна происходить отправка сообщения на сервер:
public void sendmsg (View v) {
send.start();
}
Здесь выполняется поток в котором прослушивается ответ сервера, он запускается сразу при запуске приложения
Thread t = new Thread(new Runnable() {
public void run() {
try {
Socket s = new Socket("IP ADRESS", 8000);
while(true) {
InputStreamReader listen = new InputStreamReader(s.getInputStream());
BufferedReader buff = new BufferedReader(listen);
final String message = buff.readLine();
После получения сообщения от сервера я присваиваю его в переменную и с помощью Handler пытаюсь вывести на экран
h.post(new Runnable() {
public void run() {
Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
}
});
}
}
catch (IOException e) {
e.printStackTrace();
}
}
});
Поток ниже должен становится активным во время вызова метода sendmsg, он отвечает за отправку сообщения серверу, сразу после отправки он должен становится неактивным
Thread send = new Thread(new Runnable() {
public void run() {
try {
Socket ssend = new Socket("IP ADRESS", 8000);
PrintWriter writer = new PrintWriter(ssend.getOutputStream());
writer.write("Сообщение серверу");
writer.flush();
writer.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
});
}
По техническому заданию сначала сервер должен принять сообщение "Сообщение клиенту", после чего отправить его обратно, клиент это сообщение должен принять и вывести на экран через Toast.makeText, к серверу я подключаюсь но после отправки сообщения ничего дальше не происходит. Я думаю, может быть проблема в том что я в разных потоках обьявляю переменную сокета с одним и тем же адресом, но как исправить эту проблему я не понимаю. Помогите пожалуйста.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Как правильно писать аргументы к методу Main? Мой друг изучает java и пишет public static void Main(String args[]), хотя я пишу public static void Main(String[] args) (но на C#)Не можем...
я новичок в Java, мне в универе надо сделать приложение, связаное с бдя на одном сайте нашел код, скопировал его, но он не заработал (выдал мне...