Senden und Empfangen von Nachrichten mit Socket

S

Snipestyle

Erfahrenes Mitglied
3
Abend zusammen,

sitze momentan daran so eine art "chat" zu bauen.
Es ist aber auch nur eine Art Chat, da die eine Seite nur Nachrichten senden brauch und die andere nur Empfangen


Senden versuche ich so:
PHP:
public class MyClientTask extends AsyncTask<Void, Void, Void> {
        
        String dstAddress;
        int dstPort;
        String response = "";
        
        MyClientTask(String addr, int port){
            dstAddress = addr;
            dstPort = port;
        }

        @Override
        protected Void doInBackground(Void... arg0) {
            
            Socket socket = null;
            
            try {
                socket = new Socket(dstAddress, dstPort);
                
                
                ///////////
                PrintWriter out = new PrintWriter(
                        new OutputStreamWriter(socket.getOutputStream()));
                
                out.println("Testnachricht");
                out.flush();
                /////////
                
                ByteArrayOutputStream byteArrayOutputStream = 
                        new ByteArrayOutputStream(1024);
                byte[] buffer = new byte[1024];
                
                int bytesRead;
                InputStream inputStream = socket.getInputStream();
                
               
                while ((bytesRead = inputStream.read(buffer)) != -1){
                    byteArrayOutputStream.write(buffer, 0, bytesRead);
                    response += byteArrayOutputStream.toString("UTF-8");
                }

            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                response = "UnknownHostException: " + e.toString();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                response = "IOException: " + e.toString();
            }finally{
                if(socket != null){
                    try {
                        socket.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
         //   textResponse.setText(response);
            super.onPostExecute(result);
        }
        
    }

und Empfangen so:
PHP:
private class SocketServerThread extends Thread {

        static final int SocketServerPORT = 8080;
        int count = 0;

        @Override
        public void run() {
            try {
                serverSocket = new ServerSocket(SocketServerPORT);
            
                MainActivity.this.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        info.setText("I'm waiting here: "
                                + serverSocket.getLocalPort());
                    }
                });

                while (true) {
                    Socket socket = serverSocket.accept();
                    
                //////
                    
                    BufferedReader in = new BufferedReader(
                            new InputStreamReader(socket.getInputStream()));
                          while (true) {
                            String msgg = in.readLine();
                        if (msg == null) {
                            break; // disconnected
                            } else {
                               msg.setText(msgg);
                            }
                          }
                    ///
                    
                    
                    
                    count++;
                    message += "#" + count + " from " + socket.getInetAddress()
                            + ":" + socket.getPort() + "\n";

                    MainActivity.this.runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                        //    msg.setText(message);
                        }
                    });

                    SocketServerReplyThread socketServerReplyThread = new SocketServerReplyThread(
                            socket, count);
                    socketServerReplyThread.run();

                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }

    private class SocketServerReplyThread extends Thread {

        private Socket hostThreadSocket;
        int cnt;

        SocketServerReplyThread(Socket socket, int c) {
            hostThreadSocket = socket;
            cnt = c;
        }

        @Override
        public void run() {
            OutputStream outputStream;
            String msgReply = "Hello from Android, you are #" + cnt;

            try {
                outputStream = hostThreadSocket.getOutputStream();
                PrintStream printStream = new PrintStream(outputStream);
                printStream.print(msgReply);
                printStream.close();

                message += "replayed: " + msgReply + "\n";

                MainActivity.this.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        msg.setText(message);
                    }
                });

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                message += "Something wrong! " + e.toString() + "\n";
            }

            MainActivity.this.runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    msg.setText(message);
                }
            });
        }

    }

    private String getIpAddress() {
        String ip = "";
        try {
            Enumeration<NetworkInterface> enumNetworkInterfaces = NetworkInterface
                    .getNetworkInterfaces();
            while (enumNetworkInterfaces.hasMoreElements()) {
                NetworkInterface networkInterface = enumNetworkInterfaces
                        .nextElement();
                Enumeration<InetAddress> enumInetAddress = networkInterface
                        .getInetAddresses();
                while (enumInetAddress.hasMoreElements()) {
                    InetAddress inetAddress = enumInetAddress.nextElement();

                    if (inetAddress.isSiteLocalAddress()) {
                        ip += "SiteLocalAddress: " 
                                + inetAddress.getHostAddress() + "\n";
                    }
                    
                }

            }

Also vorher kontent sie so in Kontakt treten und der Receiver hat er kannt und eine dementsprechende Meldung ausgegeben wenn was vom Sender ankam. Ich habe dann
beim Senden, das hinzugefügt:
PHP:
PrintWriter out = new PrintWriter(
                        new OutputStreamWriter(socket.getOutputStream()));
                
                out.println("Testnachricht");
                out.flush();

und beim Empfangen dementsprechen das:
PHP:
BufferedReader in = new BufferedReader(
                            new InputStreamReader(socket.getInputStream()));
                          while (true) {
                            String msgg = in.readLine();
                        if (msg == null) {
                            break; // disconnected
                            } else {
                               msg.setText(msgg);
                            }
                          }


Das Problem ist nun, dass wenn eine Nachricht abgesendet wird, die Empfänger App direkt komplett abstürzt. Ich kann das ganze aus gewissen Gründen leider nicht im Emulator testen, sonst würde ich noch ne LogCat dabei geben. Aber ich hoffe ihr könnt mir grundsätzlich etwas weiterhelfen :)

Schönen Abend noch
 
Okay, hat sich schon erledigt, habs gelöst :)
 
was war das Problem?
 

Ähnliche Themen

Jansenwilson
Antworten
1
Aufrufe
758
swa00
swa00
M
  • MikelKatzengreis
Antworten
5
Aufrufe
127
swa00
swa00
S
Antworten
0
Aufrufe
592
Sergio13
S
Zurück
Oben Unten