Есть серверная часть написанная на C# и есть клиентская часть, написанная на Java под андроид. При попытке подключения телефона к серверу вылетает все время одна ошибка. Час блуждания по гуглу не дал результатов.
(C#) Сервер:
string path = @"C:\Users\sdfaf\Downloads\Ubuntu-logo-large.png";
byte[] img = File.ReadAllBytes(path);
TcpListener listener = new TcpListener(IPAddress.Any, 2700);
listener.Start();
Console.WriteLine("Жду...");
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine("Дождался");
byte[] buff = new byte[1024];
int size = client.GetStream().Read(buff, 0, buff.Length);
string msg = Encoding.ASCII.GetString(buff, 0, size);
Console.WriteLine(msg);
if (msg == "image")
{
client.GetStream().Write(img, 0, img.Length);
Console.WriteLine("Отправил");
}
client.Close();
listener.Stop();
Клиент:
package test.testapp;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
public class MainActivity extends Activity
{
private ImageView img;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
img = findViewById(R.id.imageView);
}
public void downloadImage(View view) {
byte buff[];
Socket socket = null;
try {
socket = new Socket("192.168.1.2", 2700);
} catch (IOException e) {
e.printStackTrace();
}
PrintWriter pw = null;
try {
pw = new PrintWriter(socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
pw.write("image");
pw.flush();
buff = new byte[128 * 1024];
int size = 0;
try {
size = socket.getInputStream().read(buff);
} catch (IOException e) {
e.printStackTrace();
}
Bitmap bmp = BitmapFactory.decodeByteArray(buff, 0, size);
img.setImageBitmap(bmp);
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Манифест:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="test.testapp">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Ошибка:
> E/AndroidRuntime: FATAL EXCEPTION: main
Process: test.testapp, PID: 21978
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.view.View$DeclaredOnClickListener.onClick(View.java:4543)
at android.view.View.performClick(View.java:5317)
at android.view.View$PerformClick.run(View.java:21648)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5933)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:958)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:819)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.view.View$DeclaredOnClickListener.onClick(View.java:4538)
at android.view.View.performClick(View.java:5317)
at android.view.View$PerformClick.run(View.java:21648)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5933)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:958)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:819)
Caused by: android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1321)
at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110)
at libcore.io.IoBridge.connectErrno(IoBridge.java:150)
at libcore.io.IoBridge.connect(IoBridge.java:133)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:168)
at java.net.Socket.startupSocket(Socket.java:627)
at java.net.Socket.tryAllAddresses(Socket.java:137)
at java.net.Socket.<init>(Socket.java:187)
at java.net.Socket.<init>(Socket.java:159)
at test.testapp.MainActivity.downloadImage(MainActivity.java:32)
at java.lang.reflect.Method.invoke(Native Method)
at android.view.View$DeclaredOnClickListener.onClick(View.java:4538)
at android.view.View.performClick(View.java:5317)
at android.view.View$PerformClick.run(View.java:21648)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5933)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:958)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:819)
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости