Java 将套接字从Android发送到Python服务器
澄清:Java 将套接字从Android发送到Python服务器,java,python,android,Java,Python,Android,澄清: 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": bre
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()
@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();
}
});
}
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)
- 这两个设备连接到同一个本地网络
- IP地址是正确的
- 已经尝试使用不同的端口
- 已成功添加Android应用程序权限
- 图中显示,在虚拟机上运行的android应用程序也在真实设备上进行了测试
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()
@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();
}
});
}
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)
Java(客户端):
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()
@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();
}
});
}
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)
错误消息:
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()
@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();
}
});
}
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)
2019-12-27 17:30:03.362 9255-9281/com.example.milchycompany.myapplication E/eglCodecCommon:glUtilsParamSize:未知参数0x00008cdf
2019-12-27 17:30:03.362 9255-9281/com.example.milchycompany.myapplication E/eglcodecommon:glUtilsParamSize:unknow参数0x00008824
2019-12-27 17:30:41.054 9255-9255/com.example.milchycompany.myapplication E/AndroidRuntime:致命异常:main
流程:com.example.milchycompany.myapplication,PID:9255
android.os.NetworkOnMainThreadException
在android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork上(StrictMode.java:1303)
位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:333)
位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:196)
位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178)
位于java.net.socksocketimpl.connect(socksocketimpl.java:356)
位于java.net.Socket.connect(Socket.java:586)
位于java.net.Socket.connect(Socket.java:535)
位于java.net.Socket(Socket.java:427)
位于java.net.Socket。(Socket.java:210)
位于com.example.milchycompany.myapplication.MainActivity$1.onClick(MainActivity.java:32)
在android.view.view.performClick(view.java:5610)中
在android.view.view$PerformClick.run(view.java:22265)
位于android.os.Handler.handleCallback(Handler.java:751)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6077)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
发生这种情况是因为您正在主线程上执行网络操作。
您应该始终在线程上或作为异步任务运行网络操作
请参见下面的示例
:
永远不要忘记将此权限添加到AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
查看错误:NetworkOnMainThreadException我只发送数据,不接收数据