Olá pessoal, estou fazendo uma aplicação que realiza a comunicação cliente/servidor, via Socket, além disso, quero fazer com que o cliente envie uma mensagem para o servidor solicitando do servidor o nome de uma determinada String que se encontra em um determinado Banco de Dados.
O banco de dados é composto da coluna cof_name, que representa o nome do café, além da coluna price que representa o preço do café. Existem outras colunas neste BD, porém as duas que quero ter acesso são essas. O código do programa está representado abaixo, nele eu já consigo fazer a comunicação entre os dois e enviar a String para o banco. Entretando, no console do cliente não aparece nenhum dado de confirmação, ou seja, uma entrada. Além disso eu não sei como faço para o cliente ficar enviando sempre a String e o servidor ficar respondendo, ou seja, o cliente solicita, o servidro entra no banco de dados, pega a String e , se existir, retorna para o cliente.
Já consigo fazer com que o servidor fique aguardando uma dado do cliente, além de fazer com que o servidor entre no banco de dados. Estou utilizando a IDE NetBeans 6.5 e o BD MySQL.
Percebam que já fiz algumas tentativas que estão comentadas, além disso, já configurei o banco de dados na plataforma corretament e antes de rodar o programa faço as conexões necessárias.
Outra coisa, as mensagens no console do cliente e do servidor são as seguintes:
Cliente:
init:
deps-jar:
compile-single:
run-single:
BUILD SUCCESSFUL (total time: 0 seconds)
Servidor:
init:
deps-jar:
compile-single:
run-single:
Aguardando uma conexão cliente
Dado recebido
Recebendo dados do cliente
BUILD STOPPED (total time: 17 seconds)
Abaixo as classes:
CLASSE SERVIDOR
/*
- To change this template, choose Tools | Templates
- and open the template in the editor.
*/
package sockets;
/**
*
-
@author Raimundo
/
//import socketstestados.Servidor;
import java.net.;
import java.io.*;
// IMPORTS DO BANCO DE DADOS
//import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
//import java.util.Scanner;
public class SocketsServer {
SocketsServer aux = new SocketsServer();
public static void main(String[] args) throws IOException {
//CONEXÃO COM O BANCO DE DADOS
try {
//Class.forName("org.gjt.mm.mysql.Driver");
Class.forName("com.mysql.jdbc.Driver");
Connection conexao = DriverManager.getConnection("jdbc:mysql://localhost/sale", "root", "root");
PreparedStatement comando2 = conexao.prepareStatement("SELECT cof_name, price FROM Coffee");
try {
//PreparedStatement comando3 = conexao.prepareStatement("UPDATE Coffee SET price=?");
comando2.executeQuery();
ResultSet resultado = comando2.getResultSet();
conexao.setAutoCommit(false);
Socket socket = null;
ServerSocket serverSocket = new ServerSocket(7000);
System.out.println("Aguardando uma conexão cliente");
while (resultado.next()) {
String name = resultado.getString("cof_name");
String preco= resultado.getString("price");
//System.out.println("Nome selecionado:" + name);
socket = serverSocket.accept();
//CRIA UM CANAL PARA RECEBER DADOS
DataOutputStream oStream = new DataOutputStream(socket.getOutputStream());
DataOutputStream oStream2 = new DataOutputStream(socket.getOutputStream());
//CRIA UM CANAL PARA ENVIAR DADOS
DataInputStream iStream = new DataInputStream(socket.getInputStream());
System.err.println("Recebendo dados do cliente");
//Aguardando recebimento dos dados
String in = iStream.readUTF();
System.out.println("Dado recebido" + " " + in);
/**
if (in.equals(name)){
oStream2.writeUTF(name);
System.out.println("Nome selecionado:" + name);
}else
if (in.equals(preco))
oStream.writeUTF(preco);
*/
oStream2.writeUTF(name);
socket.close();
}
/**
Scanner teclado = new Scanner(System.in);
System.out.print("Escolha o produto e digite o novo preço:");
String novopreco= teclado.nextLine();
Statement comando3 = conexao.createStatement();
comando3.executeUpdate("UPDATE Coffee SET price='"+novopreco+"' WHERE cof_name='America'");
System.out.print("Preco atualizado:" +novopreco);
*/
conexao.commit();
conexao.setAutoCommit(true);
comando2.close();
//comando3.close();
conexao.close();
} catch (SQLException erro) {
System.out.println("Erro no SQL: " + erro.getMessage());
}
//atualizaPrecoCafe(conexao);
conexao.close();
} catch (ClassNotFoundException erro) {
System.out.println(erro.getMessage());
} catch (SQLException e) {
System.out.println("Erro no SQL: " + e.getMessage());
}
}
}
CLASSE CLIENTE
package sockets;
/*
- To change this template, choose Tools | Templates
- and open the template in the editor.
*/
/**
*
-
@author Raimundo
*/
// import java.io.BufferedReader;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
//import java.io.InputStreamReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
//import java.net.ServerSocket;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class Client_1 {
Client_1 obj=new Client_1();
public static void main(String[] args) {
//Declaro o socket cliente
Socket s = null;
//Declaro a Stream de saida de dados
//PrintStream ps = null;
try{
//Cria o socket com o recurso desejado na porta especificada
s = new Socket("127.0.0.1",7000);
BufferedReader inputStream = new BufferedReader(new InputStreamReader(s.getInputStream()));
//PrintWriter outputStream = new PrintWriter(new OutputStreamWriter(s.getOutputStream()),true);
//Cria a Stream de saida de dados
// ps = new PrintStream(s.getOutputStream());
DataInputStream iStream = new DataInputStream(s.getInputStream());
DataOutputStream oStream = new DataOutputStream(s.getOutputStream());
//Scanner teclado = new Scanner(System.in);
// String test="Fim"; //Alterado
// while (teclado.nextLine().equals(test)){ //Alterado
//Scanner teclado = new Scanner(System.in);
// System.out.print("Digite o nome do café:");
//String novopreco= teclado.nextLine();
String referenciaCafe="";
oStream.writeUTF(referenciaCafe);
//oStream.writeUTF(novopreco);
//outputStream.println("Brasil");
///String recebe=iStream.readUTF();
//System.out.println(inputStream.readLine());
//System.out.println("Nome do café:" +" " +recebe);
//Modificação
//Imprime uma linha para a stream de saída de dados
//ps.println("Estou enviando dados para o servidor");
//inputStream.close();
//outputStream.close();
iStream.close();
oStream.close();
}catch(IOException e){
System.out.println("Algum problema ocorreu ao criar ou enviar dados pelo socket.");
}
finally{
try{
//Encerra o socket cliente
s.close();
}catch(IOException e){}
}
}}