Bom moçada, em resposta ao meu amigo Shady resolvi escreve este pequeno texto q explica algumas
coisas em sockets , faz um certo tempo q eu aprendi perl , mas eu nao mexo mais com isso , pq
conheci o grande amor da minha vida , JAVA ne ? , hehehheehhehehehe , por isso os codigos perl
nao sao meus ok ? nao sei se os codigos tem erros , vcs olhem ai e corrijam ok ?
Micro tutorial Sockets Java/Perl by OnlyOne
codigos perl por : BEHAEL
Let's go !!!
---- fazendo uma conexao ---------------------------------------------
em perl :
#!/usr/bin/perl -w
use Socket;
my $host = inet_aton('127.0.0.1');
my $destino = sockaddr_in (21, $host);
socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp')) or die $!;
connect(SOCK, $destino) or die $!;
exit;
em java seria assim :
import java.net.*;
private Socket sock;
private InetAddress ia;
try{
ia = InetAddress.getByName("localhost");
String ip = ia.getHostAddress();
sock = new Socket(ip,21);
sock.close();
}catch(Exception a){ System.out.println("erro na conexao");
System.exit(0); }
a mesma coisa , fazendo conexao no local host na porta 21 e depois encerrando a conexao
***********************************************************************
---- Enviando dados na conexao ----------------------------------------
apos conectar , para enviar um dado vc faria assim
em perl :
#!/usr/bin/perl
use Socket;
my($HOST,$PORTA,$MSG);
print "Host: ";
chomp($HOST=);
print "Porta: ";
chomp($PORTA=);
print "Msg: ";
chomp($MSG=);
$line = "\n";
my $addr = inet_aton('$HOST');
my $destino = sockaddr_in($PORTA, $addr);
socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
connect(SOCK, $destino) or die $!;
send(SOCK, $MSG, 0) or die $!;
send(SOCK, $line, 0) or die $!;
exit;
detalhe para a linha $PORTA=;
esse codigo esta lendo a linha de comando e armazenando na variavel $PORTA , STDIN e a entrada
padrao de terminal no linux , tb temos
STDOUT - saida padrao de terminal
STDERR - saida de erro padrao de terminal
este caracter <> faz leituras em perl
em java seria assim , mas so q agora eu vou usar a parte grafica da linguagem pq eu tenho
preguiça de fazer por linha de comando :)
import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
private JTextField tf1;
private DataOutputStream dos;
tf1 = new JTextField("",20);
try{
ia = InetAddress.getByName("localhost");
String ip = ia.getHostAddress();
sock = new Socket(ip,21);
dos = new DataOutputStream(sock.getOutputStream());
dos.writeUTF("USER OnlyOne");
dos.close();
sock.close();
}catch(Exception a){ System.out.println("erro");
System.exit(0); }
ao contrario do exemplo em perl onde o programa esta pedindo pra vc informar a porta , o host e a
frase q vc quer enviar , eu continuo me conectando no localhost na porta 21 e enviando a frase
"USER OnlyOne"
outro detalhe , em java esta nao e a unica forma de envio , eu posso manipular as streams de
entrada e saida de um socket de outras formas :)
***********************************************************************
---- Recebendo dados na conexao --------------------------------------
ok , vc quer receber uma resposta na conexao , em perl eu nao tenho um exemplo pra dar , por isso
vou apenas passar a sintaxe da funçao ok ?
palavras do autor do texto original :
6) recv:
sintaxe: recv soquete, $var, comprimento, marcas
Recebe uma mensagem em um soquete. Tenta receber os bytes de comprimento
dos dados na variavel var a partir do handle de arquivo soquete
especificado. A funcao retornara o endereco do emissor ou um valor
indefinido se ouver um erro. A var aumentara ou diminuira segundo o
comprimento atualmente lido. A funcao tem as mesmas marcas da chamada
do sistema recv.
Ex: recv (SOQUETE, $buffer);
aproveitando vou por a sintaxe do send tb
palavras do autor do texto original :
7) send: sintaxe: send soquete, msg, marcas, [dest]
Envia uma mensagem msg em um soquete. Tem as mesmas marcas da chamada do
sistema com nome igual -- veja send(2). Nos soquetes desconectados, voce
tera que especificar um destino dest para enviar, neste caso send
funcionara como a sendto. A funcao retornara o numero de bytes enviados
ou um valor indefinido se houver um erro. No caso de erro, colocara o
codigo de erro em $!.
ex: $msg = "fuck";
send(SOQUETE, $msg);
em java seria assim :
private DataInputStream dis;
private DataOutputStream dos;
try{
ia = InetAddress.getByName("localhost");
String ip = ia.getHostAddress();
sock = new Socket(ip,21);
dos = new DataOutputStream(sock.getOutputStream());
dis = new DataInputStream(sock.getInputStream());
dos.writeUTF("USER OnlyOne");
String resposta = dis.readUTF(); //le a resposta
System.out.println(resposta);
dis.close();
dos.close();
sock.close();
}catch(Exception a){ System.out.println("erro");
System.exit(0); }
***********************************************************************
---- Analisando as respostas ------------------------------------------
ok , vc rescebeu uma resposta agora como analisa-la ?
eu nao lembro mais se perl tem uma funçao semelhante mas podemos fazer assim :
usando a funçao substr();
$var = substr("OnlyOne",0,2);
print $var;
o resultado seria a string "Onl"
sintaxe da funçao : substr(string,inicio do corte,fim do corte);
pegamos o inicio do corte , no caso o indice 0 -> letra O
pegamos o fim do corte , no caso o indice 2 -> letra l
certo ?
ai vc compara
exemplo
if($var equals "200"){
print "erro de conexao";
exit(0);
}
em java agora :
String var = "200 - login incorreto";
if(var.startsWith("200")){
System.out.println("erro de conexao");
System.exit(0);
}
valeu ?
***********************************************************************
***********************************************************************
***********************************************************************
bom galera e isso , eu tentei passar de uma forma simples o conceito e espero ter ajudado as
pessoas q tem duvidas
Only
n
e
The House Of The Rising Sun - otima musica !!!!!
Otimo post kra .. tmb estou estudando socket ( em python)
Mas para que usar tanto espaço entre as linhas???
Bom..... execente explicaçao !!!
vlw!
manero... c tivesse como mostra como faz isso em cpp ia c perfeito .. vlw mesmo kra mto bom
Agradecido,
OnlyOne. Com certeza vai me ajudar no caso das excessoes

Brigadao mano, eh noiz \o
a claro, apesar de nao mexer mais com c++ a muito tempo eu vou postar aqui como q faz ta bao ?