โŒ

Normal view

There are new articles available, click to refresh the page.
Before yesterdayMain stream

org.apache.http.conn.HttpHostConnectException:Connection to http://172.20.38.143 refused

I have developed client server Application .I am accessing mysql with php running on my machine and client running on my cell which is connected to machine.WI-FI is also switched ON.

Internet Permission are also added in Manifest file but then also the i encounter error

172.20.38.143 is IP OF MY MACHINE

  06-01 13:20:10.391: W/System.err(11157): org.apache.http.conn.HttpHostConnectException: Connection to http://172.20.38.143 refused
06-01 13:20:10.401: W/System.err(11157):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183)
06-01 13:20:10.401: W/System.err(11157):    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
06-01 13:20:10.401: W/System.err(11157):    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
06-01 13:20:10.401: W/System.err(11157):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
06-01 13:20:10.401: W/System.err(11157):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:674)
06-01 13:20:10.401: W/System.err(11157):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:511)
06-01 13:20:10.401: W/System.err(11157):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:489)
06-01 13:20:10.401: W/System.err(11157):    at nineandroid.net.example.library.JSONParser.getJSONFromUrl(JSONParser.java:42)
06-01 13:20:10.401: W/System.err(11157):    at nineandroid.net.example.library.UserFunctions.registerUser(UserFunctions.java:59)
06-01 13:20:10.401: W/System.err(11157):    at nineandroid.net.example.RegisterActivity$1.onClick(RegisterActivity.java:52)
06-01 13:20:10.411: W/System.err(11157):    at android.view.View.performClick(View.java:3567)
06-01 13:20:10.411: W/System.err(11157):    at android.view.View$PerformClick.run(View.java:14224)
06-01 13:20:10.411: W/System.err(11157):    at android.os.Handler.handleCallback(Handler.java:605)
06-01 13:20:10.411: W/System.err(11157):    at android.os.Handler.dispatchMessage(Handler.java:92)
06-01 13:20:10.411: W/System.err(11157):    at android.os.Looper.loop(Looper.java:137)
06-01 13:20:10.411: W/System.err(11157):    at android.app.ActivityThread.main(ActivityThread.java:4517)
06-01 13:20:10.411: W/System.err(11157):    at java.lang.reflect.Method.invokeNative(Native Method)
06-01 13:20:10.411: W/System.err(11157):    at java.lang.reflect.Method.invoke(Method.java:511)
06-01 13:20:10.411: W/System.err(11157):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
06-01 13:20:10.421: W/System.err(11157):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
06-01 13:20:10.421: W/System.err(11157):    at dalvik.system.NativeStart.main(Native Method)
06-01 13:20:10.421: W/System.err(11157): Caused by: java.net.ConnectException: failed to connect to /172.20.38.143 (port 80): connect failed: ENETUNREACH (Network is unreachable)
06-01 13:20:10.431: W/System.err(11157):    at libcore.io.IoBridge.connect(IoBridge.java:114)
06-01 13:20:10.431: W/System.err(11157):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
06-01 13:20:10.431: W/System.err(11157):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
06-01 13:20:10.431: W/System.err(11157):    at java.net.Socket.connect(Socket.java:848)
06-01 13:20:10.431: W/System.err(11157):    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
06-01 13:20:10.431: W/System.err(11157):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
06-01 13:20:10.431: W/System.err(11157):    ... 20 more
06-01 13:20:10.431: W/System.err(11157): Caused by: libcore.io.ErrnoException: connect failed: ENETUNREACH (Network is unreachable)
06-01 13:20:10.441: W/System.err(11157):    at libcore.io.Posix.connect(Native Method)
06-01 13:20:10.441: W/System.err(11157):    at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
06-01 13:20:10.441: W/System.err(11157):    at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
06-01 13:20:10.441: W/System.err(11157):    at libcore.io.IoBridge.connect(IoBridge.java:112)
06-01 13:20:10.441: W/System.err(11157):    ... 25 more
06-01 13:20:10.441: E/Buffer Error(11157): Error converting result java.lang.NullPointerException
06-01 13:20:10.451: E/JSON Parser(11157): Error parsing data org.json.JSONException: End of input at character 0 of 
06-01 13:20:10.451: D/AndroidRuntime(11157): Shutting down VM
06-01 13:20:10.451: W/dalvikvm(11157): threadid=1: thread exiting with uncaught exception (group=0x40c0aa68)
06-01 13:20:10.451: E/AndroidRuntime(11157): FATAL EXCEPTION: main
06-01 13:20:10.451: E/AndroidRuntime(11157): java.lang.NullPointerException
06-01 13:20:10.451: E/AndroidRuntime(11157):    at nineandroid.net.example.RegisterActivity$1.onClick(RegisterActivity.java:56)
06-01 13:20:10.451: E/AndroidRuntime(11157):    at android.view.View.performClick(View.java:3567)
06-01 13:20:10.451: E/AndroidRuntime(11157):    at android.view.View$PerformClick.run(View.java:14224)
06-01 13:20:10.451: E/AndroidRuntime(11157):    at android.os.Handler.handleCallback(Handler.java:605)
06-01 13:20:10.451: E/AndroidRuntime(11157):    at android.os.Handler.dispatchMessage(Handler.java:92)
06-01 13:20:10.451: E/AndroidRuntime(11157):    at android.os.Looper.loop(Looper.java:137)
06-01 13:20:10.451: E/AndroidRuntime(11157):    at android.app.ActivityThread.main(ActivityThread.java:4517)
06-01 13:20:10.451: E/AndroidRuntime(11157):    at java.lang.reflect.Method.invokeNative(Native Method)
06-01 13:20:10.451: E/AndroidRuntime(11157):    at java.lang.reflect.Method.invoke(Method.java:511)
06-01 13:20:10.451: E/AndroidRuntime(11157):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
06-01 13:20:10.451: E/AndroidRuntime(11157):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
06-01 13:20:10.451: E/AndroidRuntime(11157):    at dalvik.system.NativeStart.main(Native Method)

UserFunctions.java to call jsonParser

public class UserFunctions {

private JSONParser jsonParser;

private static String loginURL = "http://172.20.38.143/ah_login_api/";
private static String registerURL = "http://172.20.38.143/ah_login_api/";

private static String login_tag = "login";
private static String register_tag = "register";

// constructor
public UserFunctions(){
    jsonParser = new JSONParser();
}

/**
 * function make Login Request
 * @param email
 * @param password
 * */
public JSONObject loginUser(String email, String password){
    // Building Parameters
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", login_tag));
    params.add(new BasicNameValuePair("email", email));
    params.add(new BasicNameValuePair("password", password));
    JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);
    // return json
    // Log.e("JSON", json.toString());
    return json;
}

/**
 * function make Login Request
 * @param name
 * @param email
 * @param password
 * */
public JSONObject registerUser(String name, String email, String password){
    // Building Parameters
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", register_tag));
    params.add(new BasicNameValuePair("name", name));
    params.add(new BasicNameValuePair("email", email));
    params.add(new BasicNameValuePair("password", password));

    // getting JSON Object
    JSONObject json = jsonParser.getJSONFromUrl(registerURL, params);
    // return json
    return json;
}

/**
 * Function get Login status
 * */
public boolean isUserLoggedIn(Context context){
    DatabaseHandler db = new DatabaseHandler(context);
    int count = db.getRowCount();
    if(count > 0){
        // user logged in
        return true;
    }
    return false;
}

/**
 * Function to logout user
 * Reset Database
 * */
public boolean logoutUser(Context context){
    DatabaseHandler db = new DatabaseHandler(context);
    db.resetTables();
    return true;
}
}

jsonParser.java

public class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

// constructor
public JSONParser() {

}

public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) {

    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        httpPost.setEntity(new UrlEncodedFormEntity(params));

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        json = sb.toString();
        Log.e("JSON", json);
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);            
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON String
    return jObj;

}

}

RegisterActivity.java

public class RegisterActivity extends Activity {
    Button btnRegister;
Button btnLinkToLogin;
EditText inputFullName;
EditText inputEmail;
EditText inputPassword;
TextView registerErrorMsg;

// JSON Response node names
private static String KEY_SUCCESS = "success";
private static String KEY_UID = "uid";
private static String KEY_NAME = "name";
private static String KEY_EMAIL = "email";
private static String KEY_CREATED_AT = "created_at";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.register);

    // Importing all assets like buttons, text fields
    inputFullName = (EditText) findViewById(R.id.registerName);
    inputEmail = (EditText) findViewById(R.id.registerEmail);
    inputPassword = (EditText) findViewById(R.id.registerPassword);
    btnRegister = (Button) findViewById(R.id.btnRegister);
    btnLinkToLogin = (Button) findViewById(R.id.btnLinkToLoginScreen);
    registerErrorMsg = (TextView) findViewById(R.id.register_error);

    // Register Button Click event
    btnRegister.setOnClickListener(new View.OnClickListener() {         
        public void onClick(View view) {
            String name = inputFullName.getText().toString();
            String email = inputEmail.getText().toString();
            String password = inputPassword.getText().toString();
            UserFunctions userFunction = new UserFunctions();
            JSONObject json = userFunction.registerUser(name, email, password);

            // check for login response
            try {
                if (json.getString(KEY_SUCCESS) != null) {
                    registerErrorMsg.setText("");
                    String res = json.getString(KEY_SUCCESS); 
                    if(Integer.parseInt(res) == 1){
                        // user successfully registred
                        // Store user details in SQLite Database
                        DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                        JSONObject json_user = json.getJSONObject("user");

                        // Clear all previous data in database
                        userFunction.logoutUser(getApplicationContext());
                        db.addUser(json_user.getString(KEY_NAME), json_user.getString(KEY_EMAIL), json.getString(KEY_UID), json_user.getString(KEY_CREATED_AT));                        
                        // Launch Dashboard Screen
                        Intent dashboard = new Intent(getApplicationContext(), DashboardActivity.class);
                        // Close all views before launching Dashboard
                        dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(dashboard);
                        // Close Registration Screen
                        finish();
                    }else{
                        // Error in registration
                        registerErrorMsg.setText("Error occured in registration");
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    });

    // Link to Login Screen
    btnLinkToLogin.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            Intent i = new Intent(getApplicationContext(),
                    LoginActivity.class);
            startActivity(i);
            // Close Registration View
            finish();
        }
    });
}

}

c++ server client chat

I'm making a server, client app in c++ console based.

What I did so far:

  • I can connect to the server.
  • I can send messages to the server.
  • The server can send the messages back.

But what I can't figure out, how can I let the server act also as a client to send messages to the client while he is processing received messages from the client?

People can use it as an example as well :D

Well I will post also some parts of the code:

server:

  #include "stdafx.h"
  using namespace std;
 //our main function
 void main()
     {
int numClients;
long antwoord;
char chatname[100];
char bericht[250]; //messages
char sbericht[250]; //smessages
     //here we set the Winsock-DLL to start

WSAData wsaData;
WORD DLLVERSION;
DLLVERSION = MAKEWORD(2,1);

//here the Winsock-DLL will be started with WSAStartup
                //version of the DLL
antwoord = WSAStartup(DLLVERSION, &wsaData);

if(antwoord != 0)
{
    WSACleanup();
    exit(1);
}
else
{
    cout << "WSA started successfully" <<endl;
    cout << "The status: \n" << wsaData.szSystemStatus <<endl;
}
//the DLL is started

//structure of our socket is being created
SOCKADDR_IN addr; 

//addr is our struct

int addrlen = sizeof(addr);

//socket sListen - will listen to incoming connections
SOCKET sListen;
//socket sConnect - will be operating if a connection is found.
SOCKET sConnect;

//setup of our sockets
                //opgezocht op internet - AF_INET bekend dat het lid is van de internet familie
                            //Sock_STREAM  betekenend dat onze socket een verbinding georiรซnteerde socket is.
sConnect = socket(AF_INET,SOCK_STREAM,NULL);

//now we have setup our struct

//inet_addr is our IP adres of our socket(it will be the localhost ip
//that will be 127.0.0.1

addr.sin_addr.s_addr = inet_addr("192.168.1.103");

//retype of the family
addr.sin_family = AF_INET;

//now the server has the ip(127.0.0.1) 
//and the port number (4444)
addr.sin_port = htons(4444);

//here we will define the setup for the sListen-socket
sListen = socket(AF_INET,SOCK_STREAM,NULL);

if (sConnect == INVALID_SOCKET)
{
    cout << "Error at socket(): \n" << WSAGetLastError() <<endl;
    WSACleanup();
}
else
{
    cout << "Connect socket() is OK!" <<endl;
}

if(sListen == INVALID_SOCKET)
{
    cout << "Error at socket(): \n" << WSAGetLastError() <<endl;
    WSACleanup();
}
else
{
    cout << "Listen socket() is OK!" <<endl;
}
//here the sListen-socket will be bind
//we say that the socket has the IP adress of (127.0.0.1) and is on port (4444)
//we let the socket become the struct "addr"
if(bind(sListen, (SOCKADDR*)&addr, sizeof(addr)) == SOCKET_ERROR)
{
    cout << "bind() failed: \n" << WSAGetLastError() <<endl;
    WSACleanup();
    exit(1);
}
else{
    cout << "bind() is OK!" <<endl;
}


//here we will tell what the server must do when a connection is found
//therefor we will create an endless loop
cout << "Waiting for a incoming connection..." <<endl;
for(;;)
{

        //now we let the socket listen for incoming connections
            //SOMAXCOMM heeft het nut dat het dan voordurend luisterd naar inkomende verbindingen zonder limiet
        listen(sListen, SOMAXCONN);
        while(numClients < SOMAXCONN)
        {
            //if a connection is found: show the message!
            if(sConnect = accept(sListen, (SOCKADDR*)&addr, &addrlen))
            {
                cout << "A Connection was found!" <<endl;

                antwoord = send(sConnect, "Welcome to our chat:", 21,NULL);

                if(antwoord > 1)
                {

                    antwoord = recv(sConnect, sbericht, sizeof(sbericht), NULL);
                    antwoord = recv(sConnect, chatname, sizeof(chatname), NULL);

                        while(antwoord = recv(sConnect, sbericht, sizeof(sbericht), NULL) && (antwoord = recv(sConnect, sbericht, sizeof(sbericht), NULL)) )
                        {
                            antwoord = send(sConnect, sbericht, sizeof(sbericht), NULL);
                            antwoord = send(sConnect, chatname, sizeof(chatname), NULL);    
                        }

                }
                else
                {
                cout << "The connection to the client has been lost... \n" << "please exit the server." <<endl;
                break;
                }
                numClients++;
            }
        }


}
}

Client:

    // ChatServer.cpp : Defines the entry point for the console application.
    //
    //include of the stdafx.h file where importent files are being included

    #include "stdafx.h"

    using namespace std;

    void smessage()
    {

    }
   //our main function
   int main()
   {
//here we set the Winsock-DLL to start
string bevestiging; 

char chatname[100]; 

char bericht[250];
char sbericht[250];

string strbericht;

string strsbericht;

long antwoord;
//here the Winsock-DLL will be started with WSAStartup
                //version of the DLL
WSAData wsaData;
WORD DLLVERSION;
DLLVERSION = MAKEWORD(2,1);
antwoord = WSAStartup(DLLVERSION, &wsaData);
if(antwoord != 0)
{
    exit(1);
}
else
{
    cout << "WSA started successfully" <<endl;
    cout << "The status: \n" << wsaData.szSystemStatus <<endl;
}

SOCKADDR_IN addr;

int addrlen = sizeof(addr);

SOCKET sConnect;

sConnect = socket(AF_INET, SOCK_STREAM, NULL);

if (sConnect == INVALID_SOCKET)
{
    cout << "Error at socket(): \n" << WSAGetLastError() <<endl;
}
else
{
    cout << "socket() is OK!\n" <<endl;
}



addr.sin_addr.s_addr = inet_addr("192.168.1.103");

addr.sin_family = AF_INET;

addr.sin_port = htons(4444);

cout << "What is your chat name?" <<endl;

cin.getline(chatname, 100);


cout << "Do you want to connect to the server? [Y/N]" <<endl;

cin >> bevestiging;


if (bevestiging == "N")
{
    exit(1);
}
else
{
    if(bevestiging == "Y")
    {

        connect(sConnect, (SOCKADDR*)&addr, sizeof(addr));

        antwoord = recv(sConnect, bericht, sizeof(bericht), NULL);

        strbericht = bericht;

        cout << strbericht << chatname <<endl;

        while(true)
        {
            if(antwoord > 1)
            {

                cin.clear();
                cin.sync();
                cout << chatname << " :" <<endl;
                cin.getline(sbericht, 250);
                antwoord = send(sConnect, sbericht, sizeof(sbericht), NULL);
                antwoord = send(sConnect, chatname, sizeof(chatname), NULL);

                while(antwoord = send(sConnect, sbericht, sizeof(sbericht), NULL) && (antwoord = send(sConnect, sbericht, sizeof(sbericht), NULL)))
                {
                    antwoord = recv(sConnect, sbericht, sizeof(sbericht), NULL);
                    antwoord = recv(sConnect, chatname, sizeof(chatname), NULL);
                    cout << chatname << ":" <<endl;
                    cout << sbericht <<endl;
                    cin.getline(sbericht, 250);

                }

            }

            else
            {
            cout << "The connection to the server has been lost... \n" << "please exit the client." <<endl;

            }
        }
    }
}
    }

Elixir-socket receive problem in a chatroom project

Hi๏ผŒim a beginner using Elixir to write a chatroom project, and I've been stuck on setting up the connection between client and server. My plan is to write 2 modules for client and server and had them apply all their functions within their individual module. From the client side, its no more than setting up the socket connection and other send/receive functions from gen_tcp. For the server I implemented a handle_client function after accpeted connection to new client, and take the first message as username and connection signal. Here's the code:

  # send welcome message to affirm connection, loop handler to listean and broadcast user's input
  defp handle_client(socket) do
    send_message(socket, "Welcome to the chat room!\nPlease enter your username: ")
    Logger.info("handle_client: on listen client 1")
  
    # successfully receive, other case err message
    case recv(socket) do
      {:ok, username} ->
        Logger.info("#{username} joined the chat")
        broadcast_message("#{username} joined the chat")
        Logger.info("handle_client: on listen to client 2")
  
        # keep listening to user input
        loop(socket, username)
      {:error} ->
        Logger.info("Disconnected from the client")
    end
  end

Notice here that I warpped the recv/2 from gen_tcp to a custom recv/1, technically they do the samething except in case of error, I only return the atom {:error} instead of captureing the whole err message. Here if it's a successful return, then it will recognize the username and open the thread to that client.

Here's a little bit into the recv/1:

  defp recv(socket) do
    Logger.info("recv: on listen to client 1")
    case :gen_tcp.recv(socket, 0) do
      {:ok, data} -> {:ok, String.trim(data)}
      Logger.info("recv: message as #{data} [case :ok]")
      {:error, _reason} -> {:error}
      Logger.info("recv: message as #{_reason} [case :error]")
    end
    Logger.info("recv: on listen to client 2")
  end

You may ignore the debug log I added between, the way it perform is just as similar to recv/2. Here if I enter the username message from client, it will pass it into {:ok, data} and return to the case...do part in handle_client/1.

Here goes the problem: I tried to run the code and even if it successfully captured the username message, a CaseClauseError still occurs in the handle_client/1 where it says no matching for :ok

iex(2)>
05:58:28.083 [error] Process #PID<0.152.0> raised an exception
** (CaseClauseError) no case clause matching: :ok
    (chatroom 0.1.0) lib/chat_server.ex:37: ChatServer.handle_client/1

Which is very confusing cause technically I think it should be passing the correct tuple instead of a single :ok atom, where I actually have the message correctly captured: debug log

Please tell me if you have any clue to the possible reason of it, and I will sincerely appreciate your help. If you think more information is needed I have very happy to discuss with you under the comment.

[wait what is this, I think I've included all the stuff above?]

โŒ
โŒ