I suck at socket programming, I established a connection between server on pc and client on Android, but i have a problem when i try to send from the server to the client, the whole thing freezes and nothing happens.
here is the code of the server
- Code: Select all
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPDesktopServer implements Runnable{
public static final String SERVERIP = "192.168.1.3";
public static final int SERVERPORT = 4444;
PrintWriter out;
public void run() {
int i=0;
try {
System.out.println("S: Connecting...");
ServerSocket serverSocket = new ServerSocket(SERVERPORT);
while (true) {
Socket client = serverSocket.accept();
System.out.println("S: Receiving...");
try {
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String str = in.readLine();
i++;
String []strArray = str.split("/");
System.out.println("S: Received: '" + str + "'");
System.out.println("[0]: "+strArray[0]);
if(strArray[strArray.length-1].equals("byye")){
i=0;
}else{
while(i>1){
System.out.println(i+" : dakhalt gowa el while");
str = in.readLine();
i++;
strArray = str.split("/");
System.out.println("S: Received: '" + str + "'");
System.out.println("[0]: "+strArray[0]);
if(strArray[0].equals("Login")){
boolean login=loginCheck(strArray[1],strArray[2]);
// boolean login = false;
out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(client.getOutputStream())),true);
out.println(login);
System.out.println(login);
}
if(!strArray[strArray.length-1].equals("byye")){
i=0;
}
}
}
} catch(Exception e) {
System.out.println("S: Error");
e.printStackTrace();
}
}
} catch (Exception e) {
System.out.println("S: Error");
e.printStackTrace();
}
}
private boolean loginCheck(String user, String pass) {
if(user.equals("Amina")&&pass.equals("supernina")){
return true;
}else{
return false;
}
}
public static void main (String a[]) {
Thread desktopServerThread = new Thread(new TCPDesktopServer());
desktopServerThread.start();
}
}
and here is the code of the client on android
- Code: Select all
package com.e2esp.socket.test;
import android.app.Activity;
import android.os.Bundle;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import android.util.Log;
import android.widget.*;
import android.view.*;
public class SocketTest extends Activity {
private EditText username;
private EditText password;
private TextView status;
/** Called when the activity is first created. */
PrintWriter out;
Socket socket;
BufferedReader in;
String str;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
this.connect();
this.initLoginButton();
this.username = (EditText)this.findViewById(R.id.ed_user);
this.password = (EditText)this.findViewById(R.id.ed_pwd);
status = (TextView) findViewById(R.id.status_log);
}
private void initLoginButton() {
Button e = (Button) this.findViewById(R.id.bu_log);
// listener
e.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
loginButtonClicked();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
private synchronized void loginButtonClicked() throws IOException {
String usern = this.username.getText().toString();
String pass = this.password.getText().toString();
out.println("Login/"+usern+"/"+pass+"byye");
str = in.readLine();
status.setText(str);
}
public void connect(){
try {
InetAddress serverAddr = InetAddress.getByName("192.168.1.3");
Log.d("TCP", "C: Connecting...");
socket = new Socket(serverAddr, 4444);
String message = "Hello from Client android emulator";
try {
Log.d("TCP", "C: Sending: '" + message + "'");
out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
out.println(message);
Log.d("TCP", "C: Sent.");
Log.d("TCP", "C: Done.");
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch(Exception e) {
Log.e("TCP", "S: Error", e);
}
} catch (Exception e) {
Log.e("TCP", "C: Error", e);
}
}
}
Please help me I have a project to submit, and i can't seem to know what the problem is?!?




