terça-feira, 24 de fevereiro de 2015

Windows 7 - Erro 0x80070035 ao acessar compartilhamento samba

Talvez vocês já tenham se deparado com essa mensagem de erro no Windows 7 ao acessar um compartilhamento que fique em um servidor linux com Samba.


Para resolver esse problema, é preciso desabilitar as seguintes configurações de segurança, acessando o secpol.msc


A primeira é Cliente de rede Microsoft: assinar digitalmente a comunicação (sempre) que deve ficar Desabilitada. Normalmente essa política pode representar uma brecha de segurança em uma auditoria.


A segunda opção é Segurança de rede: Restringir NTLM: Tráfego NTLM de saída para servidores remotos que deve ficar como Permitir Tudo.

quinta-feira, 12 de fevereiro de 2015

Java: comunicação bidirecional com sockets - aprimorado

Olá pessoal,
Alguns dias atrás eu postei um exemplo de código para comunicação bi-direcional entre cliente e servidor via socket. Hoje eu trago para vocês uma versão aprimorada do programa, que tem as seguintes funcionalidades:

  1. O cliente pede que o usuário digite a mensagem que será enviada. Ao final da mensagem é enviada um caracter 0x04 de End Of Transmission EOT.
  2. O servidor recebe a mensagem e informa que a mensagem está ok
  3. O cliente está configurado com um timeout de 10 segundos. Caso a mensagem de retorno não seja recebida, o cliente aborta e retorna o prompt
  4. Caso o cliente desconecte, o servidor fecha a conexão


Os códigos estão logo abaixo:

SimpleServer.java

package servidor;
import java.io.*;
import java.net.*;
public class SimpleServer {
private int port;
private ServerSocket serverSocket;
public static OutputStream out;
public static InputStream in;
public static Socket client;
public int data;
public SimpleServer() {
port = 1775;
try {
serverSocket = new ServerSocket(port);
} catch (Exception e) {
e.printStackTrace();
}
}
public void start() {
try {
  client = serverSocket.accept();
  out = client.getOutputStream();
  in = client.getInputStream(); } catch (Exception e) {
 e.printStackTrace();
}
}
public static void fecharConexao() throws IOException {
 out.close();
 in.close();
 client.close();
}
public void receberMsg() throws IOException {
  int recebido=0;
  long tempoEspera = System.currentTimeMillis() + 10000;
  while (System.currentTimeMillis() < tempoEspera) {
  while ((data = (int)in.read()) != 4) {
   System.out.print((char)data);
   recebido=data;
  }
  System.out.println( "\n");
  enviarMsg();
  return;
  }
  return;
}
public void enviarMsg() throws IOException {
String message = "Mensagem recebida pelo servidor. Tudo ok!";
   out.write(message.getBytes());
   out.write(4);
 out.flush();
 return;
}
public static void main(String[] args) throws IOException { System.out.println("Servidor iniciado.\n");
SimpleServer server = new SimpleServer();
server.start();
System.out.println("Aguardando mensagens\n");
while(true){
try{
server.receberMsg();
} catch(Exception e){
System.out.println("Cliente desconectou");
fecharConexao();
break;
}
}
}
}

SimpleClient.java

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

public class SimpleClient {
private InetAddress address;
private int port;
public static OutputStream out;
public static InputStream in;
public static Socket socket;
public int data;
public SimpleClient() {
try {
address = InetAddress.getLocalHost();
port = 1775;
} catch (Exception e) {
e.printStackTrace();
}
}
public void connect() {
try {
 socket = new Socket(address, port);
 out = socket.getOutputStream();
 in = socket.getInputStream();
 socket.setSoTimeout(10*1000);

} catch (Exception e) {
 e.printStackTrace();
 System.out.println("Não foi possível conectar ao servidor");
}
}

public void enviarMsg() throws IOException {
 String message = null;
 System.out.println("Por favor, digite a mensagem:\n");
 BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
 message = in.readLine();
 out.write(message.getBytes());
 out.write(4);
 out.flush();

 System.out.println("\n");

  receberMsg();
}
public void receberMsg() throws IOException {
  int recebido=0;  
  while ((data = (int)in.read()) != 4) {
   System.out.print((char)data);
   recebido=data;
  };
  System.out.println("\n");
    return;
}
public void fecharConexao() throws IOException {
 out.close();
 in.close();
 socket.close();
}

public static void main(String[] args) throws IOException {
System.out.println("Iniciando programa cliente:\n");
SimpleClient client = new SimpleClient();
client.connect();
while (true){
try { client.enviarMsg();
} catch(Exception e) {
System.out.println("Timeout para receber confirmação do servidor.");
}
}
}
}



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