quarta-feira, 4 de fevereiro de 2015

Java: comunicação bidirecional com sockets

Para aqueles que estão começando na programação em java, uma das grandes dificuldades é conseguir montar uma aplicação cliente - servidor que permita uma comunicação bi-direcional. Por esse motivo, estou disponibilizando o código de um cliente/servidor simples que irá ajudar a entende esse processo.

Servidor

package servidor;
import java.io.*;
import java.net.*;
public class SimpleServer {
private int port;
private ServerSocket serverSocket;
public SimpleServer() {
port = 1775;
try {
serverSocket = new ServerSocket(port);
} catch (Exception e) {
e.printStackTrace();
}
}
public void start() {
try {
Socket client = serverSocket.accept();
OutputStream out = client.getOutputStream();
InputStream in = client.getInputStream();
String message = "Here is some stuff for you.Z";
out.write(message.getBytes());
out.flush();
int data;
while ((data = in.read()) != 'Z') {
System.out.print((char)data);
}
out.close();
in.close();
client.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
SimpleServer server = new SimpleServer();
server.start();
}
}

Cliente

package cliente;
import java.net.*;
import java.io.*;

public class SimpleClient {
private InetAddress address;
private int port;
public SimpleClient() {
try {
address = InetAddress.getLocalHost();
port = 1775;
} catch (Exception e) {
e.printStackTrace();
}
}
public void connect() {
try {
Socket socket = new Socket(address, port);
OutputStream out = socket.getOutputStream();
InputStream in = socket.getInputStream();
int data;
while ((data = in.read()) != 'Z') {
System.out.print((char)data);
}
String message = "ThanksZ";
out.write(message.getBytes());
out.flush();
out.close();
in.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
SimpleClient client = new SimpleClient();
client.connect();
}
}

Esses códigos não são de minha autoria, e foram retirados do site abaixo:

http://objectmix.com/java/71909-serversocket-clientsocket-bi-directional.html