Страницы

Поиск по вопросам

вторник, 7 января 2020 г.

Клиент -android, сервер -java app

#android #сокет #клиент_сервер


Здравствуйте, помогите пожалуйста! Есть Клиент под Android и сервер на java на pc
- когда запускаешь с эмулятора - все работает - сообщения передаются. Когда запускаешь
приложение на android устройстве - при нажатии на кнопку отправить всё вылетает.
Очень нужна ваша помощь.

Код Клиента:

package com.example.client;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import com.example.client.R;
import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;    
public class MainActivity extends Activity {

private Socket client;
private PrintWriter printwriter;
private EditText textField;
private Button button;
private String messsage;
String ip="192.168.0.80";
int port=80;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);
textField = (EditText) findViewById(R.id.textout); 
button = (Button) findViewById(R.id.send);

button.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

messsage = textField.getText().toString(); 
Socket client =null;
textField.setText("");      
DataOutputStream dataOutputStream= null;
DataInputStream dataInputStream = null;

try {

 client = new Socket("192.168.0.80", 80);
 client.setSoTimeout(100);
 dataOutputStream = new DataOutputStream(client.getOutputStream());
 dataInputStream = new DataInputStream(client.getInputStream());
 dataOutputStream.writeUTF(messsage);

} catch (UnknownHostException e) {
 e.printStackTrace();
} catch (IOException e) {
    System.out.println("Got an IOException: " + e.getMessage());
}
}
});
}
}

    


Ответы

Ответ 1



Вы производите коннект с сервером в главном потоке, на реальном устройстве в новых версиях Android SDK это выкидывает исключение, а на эмуляторе работает. Вам нужно создать поток Thread или Runnable и вынести всю логику коннекта и связи на этот поток. Обновление Вот этот код внесите в run(): client = new Socket("192.168.0.80", 80); client.setSoTimeout(100); dataOutputStream = new DataOutputStream(client.getOutputStream()); dataInputStream = new DataInputStream(client.getInputStream()); dataOutputStream.writeUTF(messsage);

Ответ 2



Почитайте следующие статьи Отзывчивое Android-приложение или 1001 способ загрузить картинку Процессы и потоки в Android: пишем AsyncTask правильно «Правильный» html парсинг

Комментариев нет:

Отправить комментарий