Код клиента:
Код: Выделить всё
public class ClientActivity extends Activity
{
private static final String TAG = "myLogs";
MyClient myClient;
EditText etSendMessage;
TextView tvReciveMessage;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvReciveMessage = (TextView) findViewById(R.id.tvTextIn);
etSendMessage = (EditText) findViewById(R.id.etTextOut);
}
public void onClick(View v)
{
switch (v.getId())
{
case R.id.butConnect://
myClient = new MyClient();
myClient.execute();
break;
case R.id.butSend://
myClient.setMessage(etSendMessage.getText().toString());
break;
case R.id.butDisConnect://
myClient.setMessage("exit");
break;
case R.id.butExit://
myClient.setMessage("exit");
try {TimeUnit.SECONDS.sleep(2);}
catch (InterruptedException e) {e.printStackTrace();}
myClient.onCancelled();
finish();
break;
}
}
class MyClient extends AsyncTask<String, String, Void>
{
private Socket socket = null;
private PrintWriter out = null;
private BufferedReader reader = null;
private String ip = "192.168.1.3";
private int port = 1984;
private boolean isConnect = false;
private String sendMessage = "";
@Override
protected void onPreExecute() {super.onPreExecute();}
private void connect()
{
try
{
socket = new Socket(ip, port);
Log.i(TAG, "Соединение установлено");
publishProgress("Соединение установлено");
isConnect = true;
socket.setKeepAlive(true);
out = new PrintWriter(socket.getOutputStream(),true);
new Thread(new Runnable()
{
public void run()
{
try
{
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(true)
{
String str = new String();
str = reader.readLine();
if(str == null || str.equals("exit") )
{
break;
}
if(str.length() > 1)
str = str.substring(0, str.length()-1);
publishProgress("Принято сообщение" + str);
}
}
catch(Exception e){ Log.e(TAG, "Ошибка4 " + e.toString());}
finally
{
try { reader.close();} catch (IOException e) { Log.e(TAG, "Ошибка5 " + e.toString());}
disconnect();
}
}
}).start();
}
catch (NumberFormatException e) { Log.e(TAG, "Ошибка1 " + e.toString()); }
catch (UnknownHostException e) {Log.e(TAG, "Ошибка2 " + e.toString());}
catch (IOException e) {Log.e(TAG, "Ошибка3 " + e.toString());}
}
private void setMessage(String message) {sendMessage = message;}
private void writeMessage(String message)
{
if (isConnect)
{
out.println(message);
out.flush();
Log.i(TAG, "Отправлено сообщение: " + message);
}
}
private void disconnect()
{
if (isConnect)
{
try{socket.close();}
catch (IOException e) {Log.e(TAG, "Ошибка6 " + e.toString());}
}
if (out != null)
{
out.close();
}
}
@Override
protected void onPostExecute(Void result)
{
this.disconnect();
super.onPostExecute(result);
}
@Override
protected void onCancelled()
{
this.disconnect();
super.onCancelled();
}
@Override
protected Void doInBackground(String... params)
{
this.connect();
while (true)
{
if (sendMessage.length() > 0)
{
this.writeMessage(sendMessage);
sendMessage = "";
}
}
}
@Override
protected void onProgressUpdate(String... values)
{
super.onProgressUpdate(values);
tvReciveMessage.setText(values[0]);
}
}
}