Boa tarde galera...
eu tenho esse servidor socket
package com.sevidor;
import java.io.DataInputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class Servidor {
private static boolean executando = true;
private static String mensagem;
private static final int PORTA = 1234;
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(1234);
InetAddress addr = InetAddress.getLocalHost();
System.out.println("----------- SERVIDOR CONECTADO "
+ addr.getHostAddress() + " PORTA " + PORTA
+ " -----------");
System.out.println("Esperando Conexões.");
Socket socket = server.accept();
System.out.println("Sevidor-> Conectou Ip "
+ socket.getInetAddress().getHostAddress());
DataInputStream in = new DataInputStream(socket.getInputStream());
try {
while (executando) {
mensagem = in.readUTF();
System.out.println("Servidor-> Recebeu Mensagem: "
+ mensagem);
}
System.out.println("Servidor-> Finalizado.");
in.close();
socket.close();
server.close();
} catch (Exception e) {
String mensagem1 = "O Usuário se desconectou!";
System.err.println("Servidor-> Erro: " + mensagem1);
executando = false;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
e tenho o cliente no android...
ClienteAndroid.javapackage com.clienteandroid;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class ClienteAndroid extends Activity implements OnClickListener {
private Button btnConectar;
private TextView lbIp;
private EditText edIp;
private EditText edPorta;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Recupera componenentes da tela
btnConectar = (Button) findViewById(R.id.btnConectar);
btnConectar.setOnClickListener(this);
edIp = (EditText) findViewById(R.id.edIp);
edPorta = (EditText) findViewById(R.id.edPorta);
lbIp = (TextView) findViewById(R.id.lbIp);
lbIp.setText(getLocalIpAddress());
}
public void onClick(View view) {
if (view == btnConectar) { // Clicou no botão Conectar
try {
// Tenta iniciar uma conexão com o Servidor de Socket
ConnectionSocket connection = ConnectionSocket
.createConnection(edIp.getText().toString(), edPorta
.getText().toString());
connection.connect();
// Inicia tela para envio de mensagens
startActivity(new Intent(this, MensagemAndroid.class));
} catch (Exception e) {
// Mostra erro na tela
Toast.makeText(this,
"Não foi possível conectar->" + e.getMessage(),
Toast.LENGTH_LONG).show();
}
}
}
/**
*
* Método para recuperar ip do aparelho
*/
public String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf
.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
}
return null;
}
}
ConnectionSocket.java
package com.clienteandroid;
import java.io.DataOutputStream;
import java.net.Socket;
import android.os.Handler;
import android.os.Message;
/**
* Classe para Conexão com Socket Servidor
*
*/
public class ConnectionSocket {
private static ConnectionSocket connection;
private int porta;
private String host;
private Socket socket;
private Sender sender;
public static final int CONNECTED = 1;
public static final int ERROR = 2;
public static final int SENDING_MESSAGE = 3;
public static final int DISCONNECTED = 4;
private Message msg;
private DataOutputStream out;
private Handler handler; // Handle para notificações na tela
private ConnectionSocket(String host, String porta) {
this.host = host;
this.porta = Integer.parseInt(porta);
}
// Método que cria Objecto ConnectionSocket
public static ConnectionSocket createConnection(String host, String porta) {
connection = new ConnectionSocket(host, porta);
return connection;
}
// Retorna conexão atual
public static ConnectionSocket getCurentConnection() {
return connection;
}
// Conecta com o Servidor
public void connect() throws Exception {
this.socket = new Socket(host, porta);
out = new DataOutputStream(socket.getOutputStream());
}
// Inicia Thread para envio de mensagens
public void startSender(Handler handler) {
sender = new Sender(out, handler);
new Thread(sender).start();
this.handler = handler;
}
// Método set mensagem para envio
public void senMessage(String mensagem) {
sender.setMessage(mensagem);
}
// Método para desconectar do Servidor
public void disconnect() throws Exception {
sender.disconnect();
socket.close();
if (handler != null) {
msg = new Message();
msg.arg1 = ConnectionSocket.DISCONNECTED;
handler.sendMessage(msg);
}
}
}
package com.clienteandroid;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MensagemAndroid extends Activity implements OnClickListener {
private TextView lbStatus;
private EditText edMensagem;
private Button btnDesconectar;
private Button btnEnviar;
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
// Verifica mensagem do Handler e mostra na tela
synchronized (msg) {
switch (msg.arg1) {
case ConnectionSocket.CONNECTED:
lbStatus.setText("Conectado");
break;
case ConnectionSocket.SENDING_MESSAGE:
lbStatus.setText("Enviou Mensagem");
edMensagem.setText("");
break;
case ConnectionSocket.ERROR:
lbStatus.setText("Ocorreu um erro->" + msg.obj);
break;
case ConnectionSocket.DISCONNECTED:
lbStatus.setText("Servidor->Desconectou");
break;
}
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.form_msg);
lbStatus = (TextView) findViewById(R.id.lbStatus);
edMensagem = (EditText) findViewById(R.id.edMensagem);
btnEnviar = (Button) findViewById(R.id.btnEnviar);
btnEnviar.setOnClickListener(this);
btnDesconectar = (Button) findViewById(R.id.btnDesconectar);
btnDesconectar.setOnClickListener(this);
try {
// Recupera Conexão atual
ConnectionSocket.getCurentConnection().startSender(handler);
} catch (Exception e) {
Toast
.makeText(
this,
"Não foi possível iniciar o Serviço para envio de Mensagens.",
Toast.LENGTH_LONG).show();
finish();
}
}
public void onClick(View v) {
// clicou no botão desconectar
if (v == btnDesconectar) {
try {
ConnectionSocket.getCurentConnection().disconnect();
} catch (Exception e) {
e.printStackTrace();
}
// Clicou no botão enviar mensagem
} else if (v == btnEnviar) {
ConnectionSocket.getCurentConnection().senMessage(
edMensagem.getText().toString());
}
}
}
Sender.java
package com.clienteandroid;
import java.io.DataOutputStream;
import java.io.IOException;
import android.os.Handler;
import android.os.Message;
/**
* Classe resposável por enviar mensagens ao Servidor
*
*
*/
class Sender implements Runnable {
private DataOutputStream out;
private boolean running = true;
private Handler handler;
private Message msg;
private String sendMessage;
public Sender(DataOutputStream out, Handler handler) {
this.out = out;
this.handler = handler;
}
public void run() {
while (running) {// Enquanto estiver executando
try {
if (sendMessage != null) { // Se existir uma mensagem para
// enviar
msg = new Message();
msg.arg1 = ConnectionSocket.SENDING_MESSAGE;
handler.sendMessage(msg); // Notifica Handler
out.writeUTF(sendMessage); // Escreve mensagem
out.flush();
sendMessage = null; // Seta nulo na mensagem
}
} catch (IOException e) {
e.printStackTrace();
msg = new Message();
msg.arg1 = ConnectionSocket.ERROR;
msg.obj = e.getMessage();
handler.sendMessage(msg);
running = false;
}
}
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public boolean isRunning() {
return running;
}
public void setRunning(boolean running) {
this.running = running;
}
public void stop() {
running = false;
}
public void setMessage(String message) {
this.sendMessage = message;
}
public void disconnect() throws Exception {
msg = new Message();
msg.arg1 = ConnectionSocket.DISCONNECTED;
handler.sendMessage(msg); // Notifica Handler
running = false;
out.close();
}
}
O QUE EU TENHO QUE FAZER PRA DEIXAR DE SINGLE THREAD PARA MULTI THREAD ????
Quem puder me ajudar, eu agradeço.