I am writing a code that needs to send data from an Android mobile to a desktop computer (Linux server) every second. Since data is sent very often, this cannot be achieved with an Http hit (since it consumes time), TCP communication seems to be the best option, since data from an Android phone can be sent very quickly through this socket programming. Client Code on Android Phone:
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class GetWebPage extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final EditText eText = (EditText) findViewById(R.id.address);
final TextView tView = (TextView) findViewById(R.id.pagetext);
final Button button = (Button) findViewById(R.id.ButtonGo);
button.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
try {
Log.v("Tcp","Clicked the button");
InetAddress serveraddress=InetAddress.getByName("67.23.14.156");
Log.v("Tcp", "Got the InetAddress");
Socket s = new Socket(serveraddress,4447);
Log.v("Tcp","Got the Socket address");
OutputStream out = s.getOutputStream();
PrintWriter output = new PrintWriter(out);
output.println("Hello Android!");
out.close();
} catch (UnknownHostException e) {
tView.setText(e.toString());
Log.v("Tcp",e.toString());
} catch (IOException e) {
tView.setText(e.toString());
Log.v("Tcp",e.toString());
}catch (Exception e) {
tView.setText(e.toString());
}
}
});
}
}
Server Side Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class ListenIncomingTcpConnection {
public static void main(String[] args) {
ServerSocket serverSocket=null;
Socket client=null;
try {
System.out.println("Creating the server object...");
serverSocket = new ServerSocket(4447);
System.out.println("Waiting for the connection...");
} catch (IOException e1) {
System.out.println(e1);
}
while (true) {
try {
client = serverSocket.accept();
System.out.println("Reading the content...");
} catch (IOException e1) {
System.out.println(e1);
e1.printStackTrace();
}
try {
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String str = in.readLine();
System.out.println("Reading the content.....");
} catch(Exception e) {
System.out.println(e);
} finally {
try{
client.close();
}catch(Exception e){
System.out.println(e);
}
}
}
}
}
Manifest File Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.spce" android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="4" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name="GetWebPage">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
</manifest>
I executed the server code on the linux machine using the "java" command on putty. He executed and stopped in this line "client = serverSocket.accept ();" When I run the client on an Android phone, it says:
Click Received InetAddress java.net.SocketException: No Host Route
.
.