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