С этого момента (ICS +), чтобы установить сетевое соединение, вам нужно будет использовать AsyncTask (или обработчик), если вы не хотите снять ограничения (не рекомендуется!).сетевые подключения по умолчанию ограничены основным потоком активности.
этот AsyncTask делает свое дело (с другой стороны, у меня был сервер сокетов c ++).в этом случае я открываю сокет, отправляю строку, полученную от основной деятельности, получаю ответ, отправляю еще одно сообщение (на этот раз «привет») и получаю окончательное сообщение перед закрытием соединения.
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import android.os.AsyncTask;
import android.util.Log;
public class SocketConnect extends AsyncTask <String, Integer, String> {
String TAG = "TGsocket";
@Override
protected String doInBackground(String... params) {
String url = params[0];
String textSend = params[1];
Log.i(TAG, "textsend = |" + textSend + "|");
Socket socket = null;
DataOutputStream dataOutputStream = null;
DataInputStream dataInputStream = null;
try {
socket = new Socket(url, 9090);
dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataInputStream = new DataInputStream(socket.getInputStream());
Log.i(TAG,"socket OK");
dataOutputStream.writeUTF(textSend);
String textInNow = dataInputStream.readLine();
Log.w(TAG, "says Server = " + textInNow);
dataOutputStream.writeUTF("hello there");
textInNow = dataInputStream.readLine();
Log.w(TAG, "says 2ndTime Server = " + textInNow);
} catch (UnknownHostException e) {
Log.e(TAG, "at thread unknownHost " + e.getMessage());
e.printStackTrace();
} catch (IOException e) {
Log.e(TAG, "at thread IO " + e.getMessage());
e.printStackTrace();
}
finally{
Log.i(TAG, "finally");
if (dataOutputStream != null){
try {
dataOutputStream.close();
} catch (IOException e) {
Log.e(TAG, "at thread dataoutput IO " + e.getMessage());
e.printStackTrace();
}
}
if (dataInputStream != null){
try {
dataInputStream.close();
} catch (IOException e) {
Log.e(TAG, "at thread datainput IO " + e.getMessage());
e.printStackTrace();
}
}
if (socket != null){
try {
Log.i(TAG, "socket closed");
socket.close();
} catch (IOException e) {
Log.e(TAG, "at thread finally IO " + e.getMessage());
e.printStackTrace();
}
}
}
return null;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
//displayProgressBar("Downloading...");
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
//updateProgressBar(values[0]);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
}
}
вызов с использованием (в пределах try catch):
SocketConnect("100.100.100.100","some string");
, где "100.100.100.100" - это IP-адрес вашего сервера.
ПРИМЕЧАНИЕ1: не забудьте установить разрешения для использования в Интернете (в вашем манифестефайл) ПРИМЕЧАНИЕ 2. Вы можете безопасно убрать все журналы вызовов и большинство проверок, а также 3 последние переопределения (я просто оставил все это там, потому что в некоторых случаях это облегчает построение).
проверено на фройо, пряниках, ics и jb.