1

Clarification:

  • The two device connect to the same network local

  • The address IP is the correct

  • Already try using different ports

  • Android app permissions were successfully added

  • The image shows that the app android running on machine virtual also were tested on device the real

intention: I intend that my phone can send data to the computer through sockets

enter image description here

Server(Python):

import socket  

s = socket.socket()   
s.bind(("192.168.1.94", 60))  
s.listen(1)  #clients permitted connect
print "server run"

sc, addr = s.accept()  

while True:  
      recibido = sc.recv(1024)  
      if recibido == "quit":  
         break        
      print "received:", recibido  
      sc.send(recibido)  

print "bye"  

sc.close()  
s.close()  

Java(Client):

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = findViewById(R.id.idbtn);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Socket socket = new Socket("192.168.1.94",60);
                DataOutputStream DOS = new DataOutputStream(socket.getOutputStream());
                DOS.writeUTF("HELLO_WORLD");
                socket.close();
            }
        });
    }

Message of error:

2019-12-27 17:30:03.362 9255-9281/com.example.milchycompany.myapplication E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008cdf
2019-12-27 17:30:03.362 9255-9281/com.example.milchycompany.myapplication E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008824
2019-12-27 17:30:41.054 9255-9255/com.example.milchycompany.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.milchycompany.myapplication, PID: 9255
    android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:333)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:196)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:356)
        at java.net.Socket.connect(Socket.java:586)
        at java.net.Socket.connect(Socket.java:535)
        at java.net.Socket.<init>(Socket.java:427)
        at java.net.Socket.<init>(Socket.java:210)
        at com.example.milchycompany.myapplication.MainActivity$1.onClick(MainActivity.java:32)
        at android.view.View.performClick(View.java:5610)
        at android.view.View$PerformClick.run(View.java:22265)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6077)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
Diego
  • 167
  • 7

1 Answers1

1

This happens because you are doing a I/O network operation on the main thread. You should always run network operations on a thread or as an asynchronous task.

See the examples below.

Thread:

Thread thread = new Thread(new Runnable() {

    @Override
    public void run() {
        try  {
            Socket socket = new Socket("192.168.1.94",60);
            DataOutputStream DOS = new 
            DataOutputStream(socket.getOutputStream());
            DOS.writeUTF("HELLO_WORLD");
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
});

thread.start();

AsyncTask

class ConnAsyncTask extends AsyncTask<Void, Integer, String> {
    protected String doInBackground(Void... arg0) {

        try {
            Socket socket = new Socket("192.168.1.94",60);
            DataOutputStream DOS = new 
            DataOutputStream(socket.getOutputStream());
            DOS.writeUTF("HELLO_WORLD");
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
}

Usage:

new ConnAsyncTask().execute();

And never forget of add this permission to AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>
FLASHCODER
  • 1
  • 7
  • 24