Note that there are some explanatory texts on larger screens.

plurals
  1. POWhat I am doing wrong here : Android Socket Connection?
    primarykey
    data
    text
    <p>I'm converting a Client-Server Application which I learned from theneboston.com to Android App, it's an instant messaging application which uses Sockets (TCP connection) to communicate, in my Android App one device is the server and the other is the client. Now there is a problem when running the server side app on the emulator, the app freezes for about 40 seconds and then an error message pops up saying: </p> <blockquote> <p>Activity ServerIM (in application Android Server Instant Messaging ) is not responding </p> </blockquote> <p>I think the problem is in creating the ServerSocket. I really need this, so I appreciate it id anyone could help me through. </p> <p>This is my <code>ServeIM</code> Android Class:</p> <pre><code>package com.example.android.server.instant.messenger; import java.io.EOFException; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.ServerSocket; import java.net.Socket; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ScrollView; import android.widget.TextView; import android.view.View.OnClickListener; public class ServerIM extends Activity { private ScrollView scrollView; private EditText userText; private Button connectButton; private Button sendButton; private TextView chatLog; private ObjectOutputStream output; private ObjectInputStream input; private ServerSocket server; private Socket connection; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_server_im); scrollView = (ScrollView) findViewById(R.id.ScrollView); userText = (EditText) findViewById(R.id.user_Text); connectButton = (Button) findViewById(R.id.button_connect); sendButton = (Button) findViewById(R.id.button_send); chatLog = (TextView) findViewById(R.id.chat_Log); ableToType(false); connectButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { showMessage("1"); // this message doesn't appends to the // TextView startRunning(); } }); } public void startRunning() { try { (new Thread(new Runnable() { public void run() { try { server = new ServerSocket(5678, 100); } catch (IOException e) { e.printStackTrace(); } } })).start(); while (true) { try { waitForConnection(); setupStreams(); whileChatting(); } catch (EOFException eofException) { showMessage("\n Server ended the connection!"); } finally { closeCrap(); } } } catch (IOException ioException) { ioException.printStackTrace(); } } // wait for connection, then display connection information private void waitForConnection() throws IOException { showMessage("Waiting for someone to connect... \n"); connection = server.accept(); showMessage("Now connected to " + connection.getInetAddress().getHostName()); } // get stream to send and recieve data private void setupStreams() throws IOException { output = new ObjectOutputStream(connection.getOutputStream()); output.flush(); input = new ObjectInputStream(connection.getInputStream()); showMessage("\n Streams are now setup! \n"); } // during the chat conversation private void whileChatting() throws IOException { String message = " You are now connected! "; sendMessage(message); ableToType(true); do { // have a conversation try { message = (String) input.readObject(); showMessage("\n" + message); } catch (ClassNotFoundException classNotFoundException) { showMessage("\n idk wtf that user sent! "); } } while (!message.equals("CLIENT - END")); } // close streams ans sockets after you are done chatting private void closeCrap() { showMessage("\n Closing Connections... \n"); ableToType(false); try { output.close(); input.close(); connection.close(); } catch (IOException ioException) { ioException.printStackTrace(); } } // send message to client private void sendMessage(String message) { try { output.writeObject("SERVER - " + message); output.flush(); showMessage("\n Server - " + message); } catch (IOException ioException) { chatLog.append("\n ERROR: I can't send this message"); } } // update chatWindow private void showMessage(final String text) { final Handler myHandler = new Handler(); (new Thread(new Runnable() { public void run() { myHandler.post(new Runnable() { public void run() { chatLog.append(text + "\n"); } }); } })).start(); } // let the user type stuff into their box private void ableToType(final boolean tof) { final Handler myHandler = new Handler(); (new Thread(new Runnable() { public void run() { myHandler.post(new Runnable() { public void run() { userText.setEnabled(tof); } }); } })).start(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_server_im, menu); return true; } } </code></pre> <p>And this is the XML file:</p> <pre><code> &lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" &gt; &lt;ScrollView android:id="@+id/ScrollView" android:layout_width="fill_parent" android:layout_height="150dp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" &gt; &lt;TextView android:id="@+id/chat_Log" android:layout_width="wrap_content" android:layout_height="339dp" android:text="" /&gt; &lt;/ScrollView&gt; &lt;EditText android:inputType="text" android:id="@+id/user_Text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/ScrollView" android:layout_marginTop="39dp" android:ems="10" /&gt; &lt;Button android:id="@+id/button_send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/user_Text" android:layout_toRightOf="@+id/user_Text" android:minWidth="100dip" android:text="Send" /&gt; &lt;Button android:id="@+id/button_connect" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button_send" android:layout_alignRight="@+id/button_send" android:layout_below="@+id/button_send" android:text="Connect" /&gt; &lt;/RelativeLayout&gt; </code></pre> <p>And the Manifest:</p> <pre><code> &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android.server.instant.messenger" android:versionCode="1" android:versionName="1.0" &gt; &lt;uses-permission android:name="android.permission.INTERNET" /&gt; &lt;uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /&gt; &lt;application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" &gt; &lt;activity android:name=".ServerIM" android:label="@string/title_activity_server_im" &gt; &lt;intent-filter&gt; &lt;action android:name="android.intent.action.MAIN" /&gt; &lt;category android:name="android.intent.category.LAUNCHER" /&gt; &lt;/intent-filter&gt; &lt;/activity&gt; &lt;/application&gt; &lt;/manifest&gt; </code></pre>
    singulars
    1. This table or related slice is empty.
    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