Android Client Interface and Java TCP Server

I am developing an Android application (client) and want it to connect to my Java server using TCP connection.

I made the code - a simple program, the client sent a message and the server to return it back - as shown below:

Server Code:

import java.net.*; public class Server { public static void main(String[] args) { int nreq = 1; try { ServerSocket sock = new ServerSocket (8080); for (;;) { Socket newsock = sock.accept(); System.out.println("Creating thread ..."); Thread t = new ThreadHandler(newsock,nreq); t.start(); } } catch (Exception e) { System.out.println("IO error " + e); } System.out.println("End!"); } } 

stream handler code in the same server project file:

  import java.io.*; import java.net.*; class ThreadHandler extends Thread { Socket newsock; int n; ThreadHandler(Socket s, int v) { newsock = s; n = v; } public void run() { try { PrintWriter outp = new PrintWriter(newsock.getOutputStream(), true); BufferedReader inp = new BufferedReader(new InputStreamReader( newsock.getInputStream())); outp.println("Hello :: enter QUIT to exit \n"); boolean more_data = true; String line; while (more_data) { line = inp.readLine(); System.out.println("Message '" + line + "' echoed back to client."); if (line == null) { System.out.println("line = null"); more_data = false; } else { outp.println("From server: " + line + ". \n"); if (line.trim().equals("QUIT")) more_data = false; } } newsock.close(); System.out.println("Disconnected from client number: " + n); } catch (Exception e) { System.out.println("IO error " + e); } } } 

And this is the client side (Android):

 package com.android.client; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class Client extends Activity { /** Called when the activity is first created. */ Scanner scanner = new Scanner(System.in); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final EditText msg = (EditText) findViewById(R.id.etMsg); Button send = (Button) findViewById(R.id.bSend); final TextView convo = (TextView) findViewById(R.id.tvConvo); final TextView status = (TextView) findViewById(R.id.tvStatus); try { send.setOnClickListener(new View.OnClickListener() { Socket s = new Socket("localhost", 8080); String message = msg.getText().toString(); @Override public void onClick(View v) { status.setText("..."); PrintWriter outp = null; BufferedReader inp = null; status.setText("Established connection.."); String serverMsg = null; try { outp = new PrintWriter(s.getOutputStream(), true); inp = new BufferedReader(new InputStreamReader(s.getInputStream())); serverMsg = inp.readLine(); } catch (IOException e) { e.printStackTrace(); } convo.append(serverMsg + "\n"); if (message != null) { if (msg.getText().toString().trim() == "QUIT") { try { s.close(); } catch (IOException e) { e.printStackTrace(); } status.setText("Disconnected from server."); } else { try { convo.append(message + "\n"); outp.println(message); serverMsg = inp.readLine(); convo.append(serverMsg + "\n"); } catch (IOException e) { e.printStackTrace(); } } } else status.setText("Problem in connection..!"); } }); } catch (IOException e) { e.printStackTrace(); } } } 

And this is the XML file:

 <?xml version="1.0" encoding="utf-8" ?> - <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <TextView android:id="@+id/tvText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Your message here:" /> - <EditText android:id="@+id/etMsg" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10"> <requestFocus /> </EditText> <TextView android:id="@+id/tvStatus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Status..." android:textAppearance="?android:attr/textAppearanceSmall" /> <Button android:id="@+id/bSend" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Send" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Conversation:" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/tvConvo" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="" /> </LinearLayout> 

I tried to run it, but nothing happens. When I click the button, TextView does not see the "Hello" message from the server.

+6
source share
2 answers

You are connecting with your Android client to localhost .

 Socket s = new Socket("localhost", 8080); 

This will only work when your server is running on an Android device. But I think it works on your PC. So, when you run your application on the Android emulator, you can connect to 10.0.2.2 to contact the host. On a real device, you need to find out the IP address of your server, to which an Android device can be delivered, for example. via wifi.

+9
source

If your server is on Windows, type cmd in the Start search box and type ipconfig at the command prompt. You will see something like IVP4 Address----- 192.168.0.101 . you need to use this address and port number on your client.

0
source

Source: https://habr.com/ru/post/912752/


All Articles