Note that there are some explanatory texts on larger screens.

plurals
  1. POObjectOutputStream and java.io.StreamCorruptedException
    primarykey
    data
    text
    <p>When I try to send a customobject (See Content.java) from my client to the server with ObjectOutputStream, I get StreamCorruptedException after the first object is sent. So if I try to send another object I get the exception, (it works the first time). I have googled and read a LOT of stuff, and now I'm about to give up, so I ask for your help.</p> <p>Client.java</p> <pre><code>public class Client extends Thread { private final static String TAG ="Client"; private final static String IP = "10.0.2.2"; private final static int PORT = 12345; private Socket s; private static ObjectOutputStream out; private static ObjectInputStream in; //private PrintWriter out; //private BufferedReader in; private TextView tv; private Content c = new Content(""); public Client(TextView tv) { this.tv = tv; } public void run() { s = null; out = null; in = null; String res; try { s = new Socket(IP, PORT); Log.v(TAG, "C: Connected to server" + s.toString()); out = new ObjectOutputStream(s.getOutputStream()); in = new ObjectInputStream(s.getInputStream()); //out = new PrintWriter(s.getOutputStream(), true); //in = new BufferedReader(new InputStreamReader(s.getInputStream())); //c.setText("PING to server from client"); //out.writeObject(c); while((c = (Content)in.readObject()) != null) { try { res = c.getText(); Log.i(TAG, res); } catch (Exception e) { Log.e("readobject", e.toString()); } } } catch(Exception e) { Log.e("run @ client", e.toString()); } finally { try { out.close(); in.close(); s.close(); } catch(IOException e) { Log.e(TAG, e.toString()); } } } public String setText() throws Exception{ return in.toString(); } public void sendText(String text) { Content cont = new Content(text); try { out.writeObject(cont); } catch(Exception e) { e.printStackTrace(); Log.e("writeObject", e.toString()); } finally { try { out.flush(); out.close(); s.close(); Log.i(TAG, "Object sent"); } catch (Exception e){} } } } </code></pre> <p>Content.java</p> <pre><code>public class Content implements Serializable{ private String text; public Content(String text) { this.text = text; } public String getText() { return text; } public void setText(String text) { this.text = text; } } </code></pre> <p><strong>Stack:</strong></p> <pre><code>04-24 17:09:12.345: WARN/System.err(520): java.io.StreamCorruptedException 04-24 17:09:12.355: WARN/System.err(520): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1707) 04-24 17:09:12.355: WARN/System.err(520): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1660) 04-24 17:09:12.365: WARN/System.err(520): at client.android.Client.sendText(Client.java:83) 04-24 17:09:12.365: WARN/System.err(520): at client.android.ClientActivity.sendToServer(ClientActivity.java:38) 04-24 17:09:12.365: WARN/System.err(520): at java.lang.reflect.Method.invokeNative(Native Method) 04-24 17:09:12.365: WARN/System.err(520): at java.lang.reflect.Method.invoke(Method.java:521) 04-24 17:09:12.365: WARN/System.err(520): at android.view.View$1.onClick(View.java:2026) 04-24 17:09:12.365: WARN/System.err(520): at android.view.View.performClick(View.java:2364) 04-24 17:09:12.365: WARN/System.err(520): at android.view.View.onTouchEvent(View.java:4179) 04-24 17:09:12.365: WARN/System.err(520): at android.widget.TextView.onTouchEvent(TextView.java:6541) 04-24 17:09:12.375: WARN/System.err(520): at android.view.View.dispatchTouchEvent(View.java:3709) 04-24 17:09:12.375: WARN/System.err(520): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 0 4-24 17:09:12.385: WARN/System.err(520): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 04-24 17:09:12.385: WARN/System.err(520): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 04-24 17:09:12.385: WARN/System.err(520): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 04-24 17:09:12.385: WARN/System.err(520): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659) 04-24 17:09:12.385: WARN/System.err(520): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 04-24 17:09:12.385: WARN/System.err(520): at android.app.Activity.dispatchTouchEvent(Activity.java:2061) 04-24 17:09:12.395: WARN/System.err(520): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643) 04-24 17:09:12.395: WARN/System.err(520): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691) 04-24 17:09:12.395: WARN/System.err(520): at android.os.Handler.dispatchMessage(Handler.java:99) 04-24 17:09:12.395: WARN/System.err(520): at android.os.Looper.loop(Looper.java:123) 04-24 17:09:12.395: WARN/System.err(520): at android.app.ActivityThread.main(ActivityThread.java:4363) 04-24 17:09:12.395: WARN/System.err(520): at java.lang.reflect.Method.invokeNative(Native Method) 04-24 17:09:12.395: WARN/System.err(520): at java.lang.reflect.Method.invoke(Method.java:521) 04-24 17:09:12.395: WARN/System.err(520): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 04-24 17:09:12.395: WARN/System.err(520): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 04-24 17:09:12.395: WARN/System.err(520): at dalvik.system.NativeStart.main(Native Method) </code></pre> <p>EDIT: added ClientActivity.java ClientActivity.java</p> <pre><code>public class ClientActivity extends Activity { private EditText et; private Client c; private TextView tv; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); et =(EditText)findViewById(R.id.clientTxt); tv = (TextView)findViewById(R.id.recievedTxt); c = new Client(tv); c.start(); try { tv.setText(c.setText()); } catch (Exception e) {} } public void sendToServer(View v) throws Exception{ String text = et.getText().toString(); Log.i("EdittextVALUE", text); c.sendText(text); } </code></pre> <p>}</p> <p>Server.java</p> <pre><code>public class Server extends Thread { private static final String TAG = "ServerThread"; private static final int PORT = 12345; public void run() { ServerSocket ss = null; Socket s = null; String res = ""; try { Log.i(TAG, "Start server"); ss = new ServerSocket(PORT); Log.i(TAG, "ServerSocket created waiting for Client.."); while(true) { s = ss.accept(); Log.v(TAG, "Client connected"); Connection c = new Connection(s); } }catch(IOException e) { e.printStackTrace(); } finally { try { //out.close(); //in.close(); s.close(); ss.close(); } catch (IOException e) {} } } </code></pre> <p>Connection.java</p> <pre><code>public class Connection extends Thread { private Socket socket; private static ObjectOutputStream out; private static ObjectInputStream in; private final String TAG = "ConnectionClass"; public Connection(Socket socket) { try { this.socket = socket; out = new ObjectOutputStream(socket.getOutputStream()); in = new ObjectInputStream(socket.getInputStream()); this.start(); } catch (IOException ex) { ex.printStackTrace(); Log.e(TAG, ex.toString()); } } public void run() { String res = ""; Content c = null; try { while(true) { while((c = (Content)in.readObject()) != null) { try { res = c.getText(); Log.i(TAG, res); } catch (Exception e) { Log.e("lololololo", e.toString()); } } } } catch (Exception ex) { Log.e(TAG, ex.toString()); } finally { try { socket.close(); in.close(); out.close(); } catch (Exception e) {} } } </code></pre> <p>ServerActivity.java</p> <pre><code>public class ServerActivity extends Activity { public Server server; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); server = new Server(); server.start(); } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload