Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Java Boy

Comunicação cliente servidor via Socket

Recommended Posts

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){}

 

}

}}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual é seu problema? não consegui compreender.

Olha só, eu não estav conseguindo fazer o Servidor se comunicar constantemet com o cliente, agora já consigo. Meu próximo passo é fazer com que o cliente envie a solicitação de uma string para o servidor, solicitando-o verificar se o mesmo pode encontrá-la cadastrada em um BD. Para isso ele deverá entrar no BD, pegar uma String e enviar para o cliente. Depois vou fazer com o servidor atualize um dado, passado pelo cliente, no banco de dados.

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.