Я хотел бы завершить очень простое приложение: отправить TCP-пакет на сервер. Ответ сервера, на данный момент не имеет значения.Android newbie - клиент сокета без потока
Итак, я пишу очень простой класс, где я создаю сокет, отправляю сообщение, а затем закрываю сокет.
Ошибка приложения в s.send(msg.serialized);
и я не понимаю, почему.
Код в myActivity:
final TcpSender s = new TcpSender();
switch (tab_ID) {
case 1:
rootView = inflater.inflate(R.layout.fragment_tab1, container, false);
//----- btn_BotolaUp
final ToggleButton btn_light = (ToggleButton) rootView.findViewById(R.id.btn_light);
btn_light.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
String toastmessage;
if (isChecked) {
msg.serialize("Identifier", "ON", "datafield1", "datafield2");
toastmessage = "Light ON";
} else {
msg.serialize("Identifier", "OFF", "datafield1", "datafield2");
toastmessage = "Light OFF";
}
s.send(msg.serialized);
Toast.makeText(rootView.getContext(), toastmessage, Toast.LENGTH_SHORT).show();
}
});
case....
etc
TcpSender Класс определяется следующим образом:
import android.util.Log;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class TcpSender {
Socket socket;
public boolean send(String messagetosend) {
try {
InetAddress serverAddr = InetAddress.getByName("192.168.1.1");
socket = new Socket(serverAddr, 10000);
Log.d("Net", "Socket created");
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
Log.d("Net", "PrintWriter out");
out.print(messagetosend);
Log.d("Net", "Message: " + messagetosend + " ->sent");
socket.close();
Log.d("Net", "Socket closed");
} catch (UnknownHostException err) {
err.printStackTrace();
Log.e("Net", "UnknownHostException err");
return (false);
} catch (IOException err) {
err.printStackTrace();
Log.e("Net","IOException err");
return (false);
}
Log.d("Net","send successful!");
return (true);
}
}
Может кто-то помочь мне понять, что я делаю неправильно?
В андроиде обычно вы получаете ошибку компиляции для UrlConnection и любой другой сетевой операции в основной теме. Я думаю, что это также относится к той же категории. Попробуйте сделать это в потоке –
Какое исключение выбрасывается в logcat? – spartygw
это сетевое исключение главной темы? –