PrintWriter sendet nicht

  • Antworten:5
  • Bentwortet
Arno Nym
  • Forum-Beiträge: 6

31.05.2014, 10:29:30 via Website

Hi,
ich programmier gerade nen kleinen Chat, von nem Android Client zu nem Java Server. Der Server läuft astrein, hab den auch schon mit nem Java Client getestet. Der läuft einwandfrei, und lauscht auf alles was rein kommt und sendet dann das was reinkommt an alle Clients zurück.
Aber der Android Client connected auch erst ohne Probleme zum Server. Aber wenn ich dann was senden will, dann geht das nicht. Die App crasht dann nicht und es passiert auch sonst nichts, der Code läuft einfach ab. Ich seh dann das Pre Execute ausgeführt wird, seh anhand von LogCat das doInBackground ausgeführt wird, und seh das PostExecute ausgeführt wird. Aber beim Server kommt nie was an. Was hab ich da denn falsch gemacht :?
Oder kann es an Firewall oder dergleichen liegen, aber dann würde er ja nich erfolgreich connecten, oder ?

private TextView MessageView;
private Button button;
private EditText input;
Socket sock;
BufferedReader reader;
PrintWriter writer;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    MessageView = (TextView)findViewById(R.id.Textfield);
    MessageView.append("Hello User \n");

    input=(EditText)findViewById(R.id.editText1);

    button = (Button)findViewById(R.id.button1);
    button.setOnClickListener(this);        


    new connect().execute();
}







@Override
public void onClick(View v) {
    int corePoolSize = 60;
    int maximumPoolSize = 80;
    int keepAliveTime = 10;

    BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>(maximumPoolSize);
    Executor threadPoolExecutor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.SECONDS, workQueue);
    new send().executeOnExecutor(threadPoolExecutor);
}



class connect extends AsyncTask<Void,Integer,String>{

    @Override
    protected String doInBackground(Void... params) {
        try {
            String server =InetAddress.getByName("jarves-server.no-ip.info").getHostAddress().toString();
            sock= new Socket(server, 8000);
            InputStreamReader streamReader = new InputStreamReader(sock.getInputStream());
            reader= new BufferedReader(streamReader);
            writer= new PrintWriter(sock.getOutputStream());

        } catch (Exception e) {
            Log.e("myLogs", e.toString());
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(String v){
        MessageView.append("Connected");
    }
}

class send extends AsyncTask<Void, Integer, String>{
    String sendmsg;

    @Override
    protected void onPreExecute(){  
        sendmsg=input.getText().toString();
        input.setText("");
        input.requestFocus();
    }

    @Override
    protected String doInBackground(Void... arg0) {
        writer.write(sendmsg);
        writer.flush();
        System.out.println("Test");
        return sendmsg;
    }

    @Override
    protected void onPostExecute(String v){
        MessageView.append("\n Me: "+v);
    }

}

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

31.05.2014, 10:33:21 via App

Kommt ein fehler in LogCat?
Hast du die internet permission gesetzt?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Arno Nym
  • Forum-Beiträge: 6

31.05.2014, 11:02:12 via App

Also im Logcat wird kein Fehler angezeigt. Und die Permission hab ich gesetzt, hatte ich nämlich vorher vergessen und dann konnte er auch nicht connecten.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

31.05.2014, 12:08:52 via Website

Ist dein Gerät im gleichen (lokalen) netz zb. wlan etc.?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Arno Nym
  • Forum-Beiträge: 6

31.05.2014, 18:06:43 via App

Nein, dann geht nämlich noch nicht mal das Connecten. Handy lauft über ganz normales Mobilfunknetz und connected dann über eine Dynamische DNS auf meinen PC wo der Java Server läuft.
Kann es vielleicht sein dass die Portweiterleitung den TCP Socket durchlässt, aber die Nachricht nicht?

Vielen Dank aber schonmal, dass du dir Mühe gemacht hast dir meine Frage durchzulesen und zu beantworten :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

31.05.2014, 23:45:10 via Website

Wenn du das Portforwarding richtig eingerichtet hast, dann sollte es funktionieren, aber ich würde dir empfehlen, dass du es erstmal im lokalen Wlan testest, dort sollte es auf jeden Fall gehen, sonst stimmt was mit der Win Firewall etc. nicht, da brauchst du es über das Mobilnetz nicht probieren.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten