#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("Сервер остановлен"); }
Комментариев нет:
Отправить комментарий