Я пытаюсь сделать приложение для Android, которое может отправить сообщение на компьютер и получить его от него. Это довольно просто. Дело в том, что я сделал это через многоадресную рассылку, хотя и не совсем. Мое приложение может получать сообщения с компьютера (который использует приложение java, которое я сделал для приема и отправки сообщений). Но когда я пытаюсь отправить сообщение с устройства на компьютер, сообщение не поступает на компьютер. Я имею в виду, к приложению.Обмен сообщениями между Android и настольным компьютером
Как настольное приложение, так и приложение для Android используют одни и те же классы Client-Server. Это то, что меня так смущает. Потому что, поскольку я использую одни и те же классы, почему он работает в одном направлении, а не в другом? Я просто не знаю.
Настольное приложение работает на окнах.
Также, когда приложение Android получает сообщение, оно получает его следующим образом: «Сообщение 1» ... ", когда сообщение должно быть получено:« Сообщение 1 ». Я не знаю, может ли это быть актуальным.
код выглядит следующим образом: Класс
Сервер:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class MulticastSocketServer implements Runnable{
final static String INET_ADDR = "224.0.0.3";
final static int PORT = 8888;
static String msg;
public MulticastSocketServer(String message) throws UnknownHostException, InterruptedException {
msg = message;
Thread thread = new Thread(this);
thread.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
// Get the address that we are going to connect to.
InetAddress addr = null;
try {
addr = InetAddress.getByName(INET_ADDR);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Open a new DatagramSocket, which will be used to send the data.
try (DatagramSocket serverSocket = new DatagramSocket()) {
msg += "\\0";
for (int i = 0; i < 10; i++) {
// Create a packet that will contain the data
// (in the form of bytes) and send it.
DatagramPacket msgPacket = new DatagramPacket(msg.getBytes(),
msg.getBytes().length, addr, PORT);
serverSocket.send(msgPacket);
System.out.println("Server sent packet with msg: " + msg);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
serverSocket.disconnect();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
Client Класс:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.UnknownHostException;
import java.util.Timer;
import java.util.TimerTask;
public class MulticastSocketClient implements Runnable {
final static String INET_ADDR = "224.0.0.3";
final static int PORT = 8888;
Connection360 conn;
public MulticastSocketClient (Connection360 connection) throws UnknownHostException {
conn = connection;
Thread thread = new Thread(this);
thread.start();
}
@Override
public void run() {
try{
// Get the address that we are going to connect to.
InetAddress address = InetAddress.getByName(INET_ADDR);
// Create a buffer of bytes, which will be used to store
// the incoming bytes containing the information from the server.
// Since the message is small here, 256 bytes should be enough.
byte[] buf = new byte[256];
// Create a new Multicast socket (that will allow other sockets/programs
// to join it as well.
try (final MulticastSocket clientSocket = new MulticastSocket(PORT)){
//Joint the Multicast group.
clientSocket.joinGroup(address);
System.out.println("Connected");
//while (true) {
// Receive the information and print it.
DatagramPacket msgPacket = new DatagramPacket(buf, buf.length);
Timer timer = new Timer("tmr");
timer.schedule(new TimerTask() {
@Override
public void run() {
clientSocket.disconnect();
}
},10000);
clientSocket.receive(msgPacket);
String msg = new String(buf, 0, buf.length);
System.out.println("Socket 1 received msg: " + msg.substring(0, msg.indexOf("\\0")));
conn.MessageReceived(msg.substring(0, msg.indexOf("\\0")));
clientSocket.disconnect();
//}
} catch (IOException ex) {
ex.printStackTrace();
}
}catch (UnknownHostException ex){
}
}
}
Это классы являются те, которые я сделал для настольного приложения. Классы, которые я сделал для Android-приложения, одинаковы, но мне пришлось изменить System.out.println()
на Log.v()
. Что касается остальных, то это точно так же.
Итак, если вы знаете, что может произойти, я бы очень признателен за вашу помощь в этой теме.
Спасибо!
Могли бы мы хотя бы увидеть какой-нибудь код? –
Да. Показать код. Это похоже на несовместимость кодирования. Попробуйте установить набор символов при отправке и получении в UTF-8 –
Я добавил код. Простите за это. Я забыл о самой важной части. Я попробую установить кодировку, но я не знаю, будет ли она работать. Потому что сообщения даже не приходят к настольному приложению. Когда я отправляю сообщение, он ничего не отображает. Я не знаю, может ли быть проблема, вызванная кодировкой. Я проверю это, как только смогу. Спасибо за быстрый ответ – blastervla