Android Studio TCP Server

  • Sonstige

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von schnibli.

    Android Studio TCP Server

    Hallo zusammen,

    Ich bin an einem Android Projekt dran und würde gerne TCP Nachrichten versenden:
    Gibt es da ein Tutorial?

    Bis jetzt besteht mein Projekt aus Buttons und Test-Funktionen:

    Quellcode

    1. final Button btn_play = (Button) rootview.findViewById(R.id.btn_play);
    2. final Button btn_stop = (Button) rootview.findViewById(R.id.btn_stop);
    3. final Button btn_pause = (Button) rootview.findViewById(R.id.btn_pause);
    4. final Button btn_next = (Button) rootview.findViewById(R.id.btn_next);
    5. final Button btn_back = (Button) rootview.findViewById(R.id.btn_back);
    6. final Button btn_run = (Button) rootview.findViewById(R.id.btn_run);
    7. btn_play.setOnClickListener(
    8. new Button.OnClickListener() {
    9. public void onClick(View v) {
    10. btn_play.setText("play");
    11. }
    12. }
    13. );
    14. btn_stop.setOnClickListener(
    15. new Button.OnClickListener() {
    16. public void onClick(View v) {
    17. btn_stop.setText("stop");
    18. }
    19. }
    20. );
    21. btn_pause.setOnClickListener(
    22. new Button.OnClickListener() {
    23. public void onClick(View v) {
    24. btn_pause.setText("Pause");
    25. }
    26. }
    27. );
    28. btn_back.setOnClickListener(
    29. new Button.OnClickListener() {
    30. public void onClick(View v) {
    31. btn_back.setText("Back");
    32. }
    33. }
    34. );
    Hallo Vielen Dank.

    Meine ersten Code versuche:

    Quellcode

    1. try {
    2. String sentence;
    3. String modifiedSentence;
    4. BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
    5. Socket clientSocket = null;
    6. clientSocket = new Socket("192.168.61.91", 8052);
    7. DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
    8. BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    9. sentence = inFromUser.readLine();
    10. outToServer.writeBytes(sentence + '\n');
    11. modifiedSentence = inFromServer.readLine();
    12. System.out.println("FROM SERVER: " + modifiedSentence);
    13. clientSocket.close();
    14. } catch (IOException e) {
    15. e.printStackTrace();
    16. }
    17. }


    Nun heisst es:
    03-12 13:54:22.193 2356-2356/bmu_test.com.bmuapp W/System.err﹕ java.net.SocketException: socket failed: EACCES (Permission denied)

    Und wenn ich anschliessend bei Manifest folgendes hinzufüge:
    <uses-permission android:name="android.permission.INTERNET"/>

    Stürtzt die App ab:
    Spoiler anzeigen

    3-12 13:58:42.809 2532-2548/bmu_test.com.bmuapp D/﹕ HostConnection::get() New Host Connection established 0xa6ba4c70, tid 2548
    03-12 13:58:42.822 2532-2548/bmu_test.com.bmuapp I/OpenGLRenderer﹕ Initialized EGL, version 1.4
    03-12 13:58:42.853 2532-2548/bmu_test.com.bmuapp D/OpenGLRenderer﹕ Enabling debug mode 0
    03-12 13:58:42.884 2532-2548/bmu_test.com.bmuapp W/EGL_emulation﹕ eglSurfaceAttrib not implemented
    03-12 13:58:42.884 2532-2548/bmu_test.com.bmuapp W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xa6b989e0, error=EGL_SUCCESS
    03-12 13:58:43.445 2532-2532/bmu_test.com.bmuapp I/Choreographer﹕ Skipped 32 frames! The application may be doing too much work on its main thread.
    03-12 13:58:46.034 2532-2532/bmu_test.com.bmuapp D/AndroidRuntime﹕ Shutting down VM
    03-12 13:58:46.034 2532-2532/bmu_test.com.bmuapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: bmu_test.com.bmuapp, PID: 2532
    android.os.NetworkOnMainThreadException
    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
    at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110)
    at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
    at libcore.io.IoBridge.connect(IoBridge.java:122)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:163)
    at java.net.Socket.startupSocket(Socket.java:590)
    at java.net.Socket.tryAllAddresses(Socket.java:128)
    at java.net.Socket.<init>(Socket.java:178)
    at java.net.Socket.<init>(Socket.java:150)
    at bmu_test.com.bmuapp.menu2_Fragment.onCreateView(menu2_Fragment.java:49)
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489)
    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:454)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5221)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
    03-12 13:58:46.150 2532-2544/bmu_test.com.bmuapp I/art﹕ Background partial concurrent mark sweep GC freed 605(94KB) AllocSpace objects, 1(16KB) LOS objects, 25% free, 2MB/2MB, paused 1.032ms total 111.886ms


    Ahh :)
    Hab jetzt mal was geändert jedoch Funktioniert es immer noch nicht :s
    Spoiler anzeigen

    Quellcode

    1. ​ public View onCreateView(LayoutInflater inflater,
    2. ViewGroup container, Bundle
    3. savedInstanceState) {
    4. tvServerMessage = (TextView) rootview.findViewById(R.id.textViewServerMessage);
    5. // Inflate the layout for this fragment
    6. View rootview = inflater.inflate(R.layout.menu2_layout,
    7. container, false);
    8. //Create an instance of AsyncTask
    9. ClientAsyncTask clientAST = new ClientAsyncTask();
    10. //Pass the server ip, port and client message to the AsyncTask
    11. clientAST.execute(new String[]{"192.168.61.91", "8052", "Hello from client"});
    12. final Button btn_play = (Button) rootview.findViewById(R.id.btn_play);
    13. final Button btn_stop = (Button) rootview.findViewById(R.id.btn_stop);
    14. final Button btn_pause = (Button) rootview.findViewById(R.id.btn_pause);
    15. final Button btn_next = (Button) rootview.findViewById(R.id.btn_next);
    16. final Button btn_back = (Button) rootview.findViewById(R.id.btn_back);
    17. final Button btn_run = (Button) rootview.findViewById(R.id.btn_run);
    18. btn_play.setOnClickListener(
    19. new Button.OnClickListener() {
    20. public void onClick(View v) {
    21. btn_play.setText("play");
    22. }
    23. }
    24. );
    25. btn_stop.setOnClickListener(
    26. new Button.OnClickListener() {
    27. public void onClick(View v) {
    28. btn_stop.setText("stop");
    29. }
    30. }
    31. );
    32. btn_pause.setOnClickListener(
    33. new Button.OnClickListener() {
    34. public void onClick(View v) {
    35. btn_pause.setText("Pause");
    36. }
    37. }
    38. );
    39. btn_back.setOnClickListener(
    40. new Button.OnClickListener() {
    41. public void onClick(View v) {
    42. btn_back.setText("Back");
    43. }
    44. }
    45. );
    46. btn_next.setOnClickListener(
    47. new Button.OnClickListener() {
    48. public void onClick(View v) {
    49. btn_next.setText("Next");
    50. }
    51. }
    52. );
    53. btn_run.setOnClickListener(
    54. new Button.OnClickListener() {
    55. public void onClick(View v) {
    56. btn_run.setText("Run");
    57. }
    58. }
    59. );
    60. /**
    61. * The class extends the Thread class so we can receive and send messages at the same time
    62. */
    63. return rootview;
    64. }
    65. class ClientAsyncTask extends AsyncTask<String, Void, String> {
    66. @Override
    67. protected String doInBackground(String... params) {
    68. String result = null;
    69. try {
    70. //Create a client socket and define internet address and the port of the server
    71. Socket socket = new Socket(params[0],
    72. Integer.parseInt(params[1]));
    73. //Get the input stream of the client socket
    74. InputStream is = socket.getInputStream();
    75. //Get the output stream of the client socket
    76. PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
    77. //Write data to the output stream of the client socket
    78. out.println(params[2]);
    79. //Buffer the data coming from the input stream
    80. BufferedReader br = new BufferedReader(
    81. new InputStreamReader(is));
    82. //Read data in the input buffer
    83. result = br.readLine();
    84. //Close the client socket
    85. socket.close();
    86. } catch (NumberFormatException e) {
    87. e.printStackTrace();
    88. } catch (UnknownHostException e) {
    89. e.printStackTrace();
    90. } catch (IOException e) {
    91. e.printStackTrace();
    92. }
    93. return result;
    94. }
    95. @Override
    96. protected void onPostExecute(String s) {
    97. //Write server message to the text view
    98. tvServerMessage.setText(s);
    99. }
    100. }
    [\spoiler]
    'android.view.View android.view.View.findViewById(int)' on a null object reference:s

    schnibli schrieb:

    'android.view.View android.view.View.findViewById(int)' on a null object reference:s



    tvServerMessage = (TextView) rootview.findViewById(R.id.textViewServerMessage);
    // Inflate the layout for this fragment
    View rootview = inflater.inflate(R.layout.menu2_layout, container, false);


    Fällt dir da nicht was auf?


    Bevor du das Layout nicht "inflated" hast, sind alle Views darauf NULL. Genau wie deine View rootview auch.