Jump to content
Fórum Script Brasil
  • 0

Socket Client: Retorno do servidor


felipe_azv

Question

Olá pessoal.

Estou montando uma aplicação que requer a utilização de sockets.

Montei o socket server em Java. No caso do client eu estou pretendendo montar, na verdade, não em perl e sem em PerlScript (na web).

(espero que aqui seria a área correta para postar essa dúvida :blink: ).

Bom, o meu socket server está funcionanado corretamente e o socket client está enviando a informação de acordo com o esperado, porém, como eu estou dando os primeiros passos com programação Perl/PerlScript, não faço idéia de como pegar o retorno enviado pelo socket server :S.

Alguém saberia como fazê-lo?

Aqui está meu socket cliente (estou usando o IIS 6+ ActivePerl para rodá-lo numa aplicação em ASP e aparentemente está tudo certo).

# Client Program

use IO::Socket::INET;

# Create a new socket

$MySocket=new IO::Socket::INET->new(PeerPort=>7000,Proto=>'tcp',PeerAddr=>'192.168.0.178');

# Send messages

my $msg = "Mensagem do Client Socket para o Server Socket";

#my $returnmsg = AQUI PRECISO PEGAR O RETORNO DO SOCKET SERVER

if($msg ne '') {

if($MySocket->send($msg)) {

$Response->Write("retorno socket server");

}

}

caso queiram ver o código java o server socket:

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

public class Servidor {

public static void main(String[] args) {

ServerSocket server_socket = null;

Socket client_socket = null;

//Declaro o leitor para a entrada e saida de dados

BufferedReader in = null;

PrintWriter out = null;

try {

//Cria o ServerSocket na porta 7000 se estiver disponível

server_socket = new ServerSocket(7000);

//Aguarda uma conexão na porta especificada e cria retorna o socket que irá comunicar com o cliente

client_socket = server_socket.accept();

//Cria um BufferedReader para o canal da stream de entrada de dados do socket client_socket

in = new BufferedReader(new InputStreamReader(client_socket.getInputStream()));

out = new PrintWriter(client_socket.getOutputStream(), true);

// >>Descomentar a linha abaixo para enviar para o client socket!

//out.println("Mensagem do Servidor para o Cliente");

//Aguarda por algum dado e imprime a linha recebida quando recebe

System.out.println(in.readLine());

//trata possíveis excessões de input/output. Note que as excessões são as mesmas utilizadas para as classes de java.io

} catch (IOException e) {

//Imprime uma notificação na saída padrão caso haja algo errado.

System.out.println("Algum problema ocorreu para criar ou receber o socket.");

} finally {

try {

//Encerro o socket de comunicação

client_socket.close();

//Encerro o ServerSocket

server_socket.close();

} catch (IOException e) {

}

}

}

}

Obrigado!

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0
Olá pessoal.

Estou montando uma aplicação que requer a utilização de sockets.

Montei o socket server em Java. No caso do client eu estou pretendendo montar, na verdade, não em perl e sem em PerlScript (na web).

(espero que aqui seria a área correta para postar essa dúvida :blink: ).

Bom, o meu socket server está funcionanado corretamente e o socket client está enviando a informação de acordo com o esperado, porém, como eu estou dando os primeiros passos com programação Perl/PerlScript, não faço idéia de como pegar o retorno enviado pelo socket server :S.

Alguém saberia como fazê-lo?

Aqui está meu socket cliente (estou usando o IIS 6+ ActivePerl para rodá-lo numa aplicação em ASP e aparentemente está tudo certo).

# Client Program
    use IO::Socket::INET;

    # Create a new socket
    $MySocket=new IO::Socket::INET->new(PeerPort=>7000,Proto=>'tcp',PeerAddr=>'192.168.0.178');

    # Send messages

    my $msg = "Mensagem do Client Socket para o Server Socket";
    #my $returnmsg = AQUI PRECISO PEGAR O RETORNO DO SOCKET SERVER

    if($msg ne '') {
        if($MySocket->send($msg)) {
            $Response->Write("retorno socket server");
        }
    }

        caso queiram ver o código java o server socket:
       

       import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Servidor {

    public static void main(String[] args) {

        ServerSocket server_socket = null;
        Socket client_socket = null;
        //Declaro o leitor para a entrada e saida de dados
        BufferedReader in = null;
        PrintWriter out = null;

        try {

            //Cria o ServerSocket na porta 7000 se estiver disponível
            server_socket = new ServerSocket(7000);

            //Aguarda uma conexão na porta especificada e cria retorna o socket que irá comunicar com o cliente
            client_socket = server_socket.accept();

            //Cria um BufferedReader para o canal da stream de entrada de dados do socket client_socket
            in = new BufferedReader(new InputStreamReader(client_socket.getInputStream()));
            out = new PrintWriter(client_socket.getOutputStream(), true);
            
            // >>Descomentar a linha abaixo para enviar para o client socket!
            //out.println("Mensagem do Servidor para o Cliente"); 

            //Aguarda por algum dado e imprime a linha recebida quando recebe
            System.out.println(in.readLine());

        //trata possíveis excessões de input/output. Note que as excessões são as mesmas utilizadas para as classes de java.io
        } catch (IOException e) {

            //Imprime uma notificação na saída padrão caso haja algo errado.
            System.out.println("Algum problema ocorreu para criar ou receber o socket.");

        } finally {

            try {

                //Encerro o socket de comunicação
                client_socket.close();
                //Encerro o ServerSocket
                server_socket.close();

            } catch (IOException e) {
            }
        }
    }
}



Obrigado![/quote]


depois de dar uma pesquisada eu consegui resolver meu problema.

pra quem quiser, aqui está o código que montei pra montar um client socket em perl pegar um retorno do servidor:

#!/usr/local/bin/perl
# file: tcp_echo_cli1.pl
# usage: tcp_echo_cli1.pl [host] [port]
# Echo client, TCP version


use Socket;
use IO::Handle;
my ($bytes_out,$bytes_in) = (0,0);

my $host = '192.168.0.178';
my $port = '7000'; 
my $protocol = 'tcp';
my $msg_out = "Mensagem do cliente para o servidor!";

$host = inet_aton($host) or
    die "$host: unknown host";

socket(SOCK, AF_INET, SOCK_STREAM, $protocol) or
    die "socket() failed: $!";
my $dest_addr = sockaddr_in($port,$host);
connect(SOCK,$dest_addr) or
    die "connect() failed: $!";

SOCK->autoflush(1);

$Response->Write("Enviando mensagem para o servidor:  <b>$msg_out</b>");
print SOCK $msg_out;

my $msg_in = <SOCK>;
$Response->Write("<br/>MENSAGEM do Servidor: <b>$msg_in</b>");

close SOCK;

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.8k
×
×
  • Create New...