Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Не отправляются данные с клиента (андроид) на сервер (java pc)

#java #android #сокет #клиент_сервер


Доброе утро.

Есть клиент на андроиде, с него должна отправиться строка на сервер.
Запускаю клиент на реальном устройстве.

Вот код клиента:

public class Client extends Thread {

private boolean running = false;
private static Socket s = null;
private String ip = "тут мой ip";
private int port = 80;
private String data;
static DataInputStream din = null;
static DataOutputStream dout = null;

public Client(String name, int score){
    data = name + " " + score;
}

public void setRunning(boolean b){running = b;}

@Override
public void run() {
    while (running) {
        try {
            s = new Socket(ip, port);
            dout = new DataOutputStream(s.getOutputStream());
            din = new DataInputStream(s.getInputStream());
            dout.writeUTF(data);
        } catch (Exception ex) {}
    }
}


}

Все это действо должно отработать в другом классе, вот в этом методе:

private void sendData(String name, int score){
    client = new Client(name, score);
    client.setRunning(true);
    client.start();
}


Код сервера:

public class Server {


static ServerSocket ss;
static Socket s;
static DataInputStream din;
static DataOutputStream dout;

static String data = "";

public static void main(String[] args){
    try{
        System.out.println("Сервер запущен\n");
        ss = new ServerSocket(80);
        s = ss.accept();

        din = new DataInputStream(s.getInputStream());
        dout = new DataOutputStream(s.getOutputStream());

        while(true){
            data = din.readUTF();
            System.out.println("Score: " + data);
        }

    } catch(Exception ex){ex.printStackTrace();}
    System.out.println("Сервер остановлен");
}


}

Wi-fi на устройстве включил, ip точно мой, все по-идее должно работать.
Клиент в отдельном потоке, не понимаю тогда в чем дело.
Подскажите, пожалуйста.
    


Ответы

Ответ 1



На стороне клиента: Client.java: import java.util.*; import java.net.*; import java.io.*; public class Client extends Thread { //Все null,false,0 по умолчанию. Можно не писать. private boolean running; private Socket s; private String ip = "192.168.1.4"; private int port = 1234; static DataInputStream din; static DataOutputStream dout; public void setRunning(boolean b){running = b;} @Override public void run() { try { s = new Socket(ip, port); dout = new DataOutputStream(s.getOutputStream()); din = new DataInputStream(s.getInputStream()); while (running); } catch (Exception ex) { ex.printStackTrace(); } finally { close(); } } public boolean isConnected() { return s!=null&&s.isConnected(); } public void sendMessage(String message) { if(dout!=null&&running) { try { dout.writeUTF(message); dout.flush(); } catch(Exception ex) { running = false; } } } public void close() { if(din!=null) try{din.close();}catch(IOException io){} if(dout!=null) try{dout.close();}catch(IOException io){} if(s!=null) try{s.close();}catch(IOException io){} } } Вызов класса: Client clt = new Client(); clt.setRunning(true); clt.start(); while(!clt.isConnected()); clt.sendMessage("Hello"); clt.sendMessage(", World!"); clt.close(); Манифест: На стороне сервера: Server.java: static ServerSocket ss; static Socket s; static DataInputStream din; static DataOutputStream dout; static String data = ""; public static void main(String[] args){ try{ System.out.println("Сервер запущен\n"); ss = new ServerSocket(1234); s = ss.accept(); din = new DataInputStream(s.getInputStream()); dout = new DataOutputStream(s.getOutputStream()); while((data = din.readUTF())!=null){ System.out.println("Score: " + data); } } catch(Exception ex){ ex.printStackTrace(); } finally { if(dout!=null) try{dout.close();}catch(IOException io){} if(din!=null) try{din.close();}catch(IOException io){} if(s!=null) try{s.close();}catch(IOException io){} if(ss!=null) try{ss.close();} catch(IOException io){} } System.out.println("Сервер остановлен"); }

Комментариев нет:

Отправить комментарий