Subpage under development, new version coming soon!
Subject: Programação
Olhei seu código, mas sem a classe numeroInteiro fica mais difícil de saber o erro. Tem como vc postar ela aqui?
qd cria a chave c num tem q fazer algo do tipo
"NumeroInteiro Chave = new NumeroInteiro() ;"
nao ?
"NumeroInteiro Chave = new NumeroInteiro() ;"
nao ?
era isso mesmo... pronto, agora voltou a rodar o programa soh que eu continuo inserindo os numeros e quando vou listar, soh lista 0(zero)
public class NumeroInteiro {
private int Numero;
private int vMax;
private int vMin;
public int getNumero()
{
return Numero;
}
public void setNumero(int num)
{
if (num >= getVMin() && num <= getVMax())
{
this.Numero = num;
}
}
public int getVMax()
{
return vMax;
}
public void setVMax(int max)
{
vMax = max;
}
public int getVMin()
{
return vMin;
}
public void setVMin(int min)
{
vMin = min;
}
public NumeroInteiro()
{
this.Numero = 0;
this.vMax = Integer.MAX_VALUE;
this.vMin = Integer.MAX_VALUE;
}
public NumeroInteiro(int num)
{
this();
setNumero(num);
}
public NumeroInteiro(int min, int max)
{
this.Numero = 0;
if (max>=min)
{
this.vMin = min;
this.vMax = max;
}
if (min>0 && min<0)
{
this.Numero = min;
}
else
{
this.vMin = 0;
this.vMax = 0;
}
}
public NumeroInteiro(int min, int max, int num)
{
this(min,max);
setNumero(num);
}
public void inc()
{
somar(1);
}
public void somar(int n)
{
setNumero(getNumero()+n);
}
public void dec()
{
diminuir(1);
}
public void diminuir(int n)
{
setNumero(getNumero()-n);
}
public int PesquisaSequencial (int V[], int Chave)
{
int ind=0;
while (ind < V.length)
if (V[ind] == Chave)
break;
else
ind++;
if (ind>= V.length)
ind=-1;
return ind;
}
}
public class NumeroInteiro {
private int Numero;
private int vMax;
private int vMin;
public int getNumero()
{
return Numero;
}
public void setNumero(int num)
{
if (num >= getVMin() && num <= getVMax())
{
this.Numero = num;
}
}
public int getVMax()
{
return vMax;
}
public void setVMax(int max)
{
vMax = max;
}
public int getVMin()
{
return vMin;
}
public void setVMin(int min)
{
vMin = min;
}
public NumeroInteiro()
{
this.Numero = 0;
this.vMax = Integer.MAX_VALUE;
this.vMin = Integer.MAX_VALUE;
}
public NumeroInteiro(int num)
{
this();
setNumero(num);
}
public NumeroInteiro(int min, int max)
{
this.Numero = 0;
if (max>=min)
{
this.vMin = min;
this.vMax = max;
}
if (min>0 && min<0)
{
this.Numero = min;
}
else
{
this.vMin = 0;
this.vMax = 0;
}
}
public NumeroInteiro(int min, int max, int num)
{
this(min,max);
setNumero(num);
}
public void inc()
{
somar(1);
}
public void somar(int n)
{
setNumero(getNumero()+n);
}
public void dec()
{
diminuir(1);
}
public void diminuir(int n)
{
setNumero(getNumero()-n);
}
public int PesquisaSequencial (int V[], int Chave)
{
int ind=0;
while (ind < V.length)
if (V[ind] == Chave)
break;
else
ind++;
if (ind>= V.length)
ind=-1;
return ind;
}
}
Eiro, olhei seu código e tem um valor que está setado errado, por isso qdo vc insere qualquer número no vetor parece que vc ta inserindo o zero. No construtor da sua classe vc colocou que tanto o vMin qto o vMax receberiam Integer.MAX_VALUE. Aí na função setNumero ele não entrava no if e consequentemente não inseria nada no vetor.
public NumeroInteiro()
{
this.Numero = 0;
this.vMax = Integer.MAX_VALUE;
this.vMin = Integer.MIN_VALUE;
}
public NumeroInteiro()
{
this.Numero = 0;
this.vMax = Integer.MAX_VALUE;
this.vMin = Integer.MIN_VALUE;
}
hmmm que merda... olhai como um pequeno detalhe lah atrás modifica todo o programa...
vlw laerg,rac2,twilo ;D
agora me ajudem a listar os números numa janela só :P
vlw laerg,rac2,twilo ;D
agora me ajudem a listar os números numa janela só :P
Criei uma String que guarda todos os valores que estao no vetor, depois é só mostrar na janela.
int cont = 0;
int op = 0;
String listaNumeros = "";
if (op == 2){
for (int i = 0; i < cont; i++)
listaNumeros = listaNumeros + i + " => " + Lista[i].getNumero() + "\n";
JOptionPane.showMessageDialog(null, listaNumeros);
listaNumeros = "";
}
int cont = 0;
int op = 0;
String listaNumeros = "";
if (op == 2){
for (int i = 0; i < cont; i++)
listaNumeros = listaNumeros + i + " => " + Lista[i].getNumero() + "\n";
JOptionPane.showMessageDialog(null, listaNumeros);
listaNumeros = "";
}
ow... como eu faço pra esse programa aí ser um vetor e ter pesquisa sequencial, ordenada e binaria?
pula essa :D
agora tem um trabalhão q eu preciso de uma luz... ta foda.. aquele lance das conexões esgotadas quando passava o numero de conexões, o if endoidava, e deixava encerrado o server..
no cliente, quando ele encerrar e fechar a janela, é pra diminuir o contador da lista de clientes conectados no servidor, saca?
. Objetivos
• Este trabalho tem como objetivo a implementação de um programa distribuído de troca de mensagens (chat) baseado na interface sockets e com implementação em Java.
2. Requisitos
• O servidor e o cliente deverão permitir a parametrização da porta listener
• Servidor deverá permitir a parametrização do número máximo de clientes conectados
• Servidor deverá exibir o número atual de clientes conectados
• Servidor deverá manter um controle de identificação dos clientes conectados através de um apelido informado pelo cliente no momento da conexão
• Servidor não poderá permitir que dois clientes tenham o mesmo identificador (apelido)
• A cada cliente conectado / desconectado o servidor deverá enviar uma mensagem administrativa aos demais clientes informando o cliente que respectivamente se conectou ou desconectou
• Cliente deverá implementar interface gráfica que permita a exibição das mensagens recebidas, o envio de mensagens para todos os clientes (broadcast) ou para um cliente em particular
3. Opcionais
• A cada um dos opcionais implementados a equipe fará jus a 0,5 ponto de bonificação na nota final do trabalho. São estes os opcionais:
• Implementação de interface gráfica no servidor
• Parametrização do cliente / servidor através de arquivo de configuração
• Permitir ao servidor desconectar um determinado cliente conectado
• Interface gráfica do cliente implementando uma lista (combo-box) atualizada com todos os clientes conectados
agora tem um trabalhão q eu preciso de uma luz... ta foda.. aquele lance das conexões esgotadas quando passava o numero de conexões, o if endoidava, e deixava encerrado o server..
no cliente, quando ele encerrar e fechar a janela, é pra diminuir o contador da lista de clientes conectados no servidor, saca?
. Objetivos
• Este trabalho tem como objetivo a implementação de um programa distribuído de troca de mensagens (chat) baseado na interface sockets e com implementação em Java.
2. Requisitos
• O servidor e o cliente deverão permitir a parametrização da porta listener
• Servidor deverá permitir a parametrização do número máximo de clientes conectados
• Servidor deverá exibir o número atual de clientes conectados
• Servidor deverá manter um controle de identificação dos clientes conectados através de um apelido informado pelo cliente no momento da conexão
• Servidor não poderá permitir que dois clientes tenham o mesmo identificador (apelido)
• A cada cliente conectado / desconectado o servidor deverá enviar uma mensagem administrativa aos demais clientes informando o cliente que respectivamente se conectou ou desconectou
• Cliente deverá implementar interface gráfica que permita a exibição das mensagens recebidas, o envio de mensagens para todos os clientes (broadcast) ou para um cliente em particular
3. Opcionais
• A cada um dos opcionais implementados a equipe fará jus a 0,5 ponto de bonificação na nota final do trabalho. São estes os opcionais:
• Implementação de interface gráfica no servidor
• Parametrização do cliente / servidor através de arquivo de configuração
• Permitir ao servidor desconectar um determinado cliente conectado
• Interface gráfica do cliente implementando uma lista (combo-box) atualizada com todos os clientes conectados
import java.net.*;
import java.io.*;
import javax.swing.JOptionPane;
public class Cliente extends Thread {
Socket socket;
PrintStream out;
FrameCliente frame;
//public static final int PORTA = 1024;
private int PORTA;
public static final String SERVIDOR = "localhost";
public Cliente(int port) {
this.PORTA=port;
socket = new Socket();
try {
socket.connect(
new InetSocketAddress(
InetAddress.getByName(SERVIDOR),
PORTA)
);
frame = new FrameCliente(socket);
frame.setVisible(true);
}
catch(Exception ex) {
System.out.println(ex);
System.exit(1);
}
}
public void run() {
BufferedReader in;
String msg;
while (true) {
try {
if ( socket.getInputStream().available() > 0 ) {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
msg = in.readLine();
frame.txfArea.append(msg + "\n");
}
}
catch(Exception ex) {
System.out.println(ex);
}
try { Thread.sleep(1000); } catch(Exception ex) { }
}
}
public static void main(String[] args) {
int p = Integer.parseInt(JOptionPane.showInputDialog("Informe a Porta do Servidor"));;
Cliente cliente = new Cliente(p);
cliente.start();
}
}
import java.io.*;
import javax.swing.JOptionPane;
public class Cliente extends Thread {
Socket socket;
PrintStream out;
FrameCliente frame;
//public static final int PORTA = 1024;
private int PORTA;
public static final String SERVIDOR = "localhost";
public Cliente(int port) {
this.PORTA=port;
socket = new Socket();
try {
socket.connect(
new InetSocketAddress(
InetAddress.getByName(SERVIDOR),
PORTA)
);
frame = new FrameCliente(socket);
frame.setVisible(true);
}
catch(Exception ex) {
System.out.println(ex);
System.exit(1);
}
}
public void run() {
BufferedReader in;
String msg;
while (true) {
try {
if ( socket.getInputStream().available() > 0 ) {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
msg = in.readLine();
frame.txfArea.append(msg + "\n");
}
}
catch(Exception ex) {
System.out.println(ex);
}
try { Thread.sleep(1000); } catch(Exception ex) { }
}
}
public static void main(String[] args) {
int p = Integer.parseInt(JOptionPane.showInputDialog("Informe a Porta do Servidor"));;
Cliente cliente = new Cliente(p);
cliente.start();
}
}
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import java.awt.Rectangle;
import java.awt.Dimension;
import javax.swing.JTextField;
import java.net.*;
import java.io.*;
public class FrameCliente extends JFrame {
Socket socket;
PrintStream out;
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
JTextArea txfArea = null;
private JTextField txfMsg = null;
public FrameCliente(Socket socket) {
super();
this.socket = socket;
try {
out = new PrintStream(socket.getOutputStream());
}
catch(Exception ex) {
System.out.println(ex);
}
initialize();
}
private void initialize() {
this.setSize(300, 203);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");
}
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getTxfArea(), null);
jContentPane.add(getTxfMsg(), null);
}
return jContentPane;
}
private JTextArea getTxfArea() {
if (txfArea == null) {
txfArea = new JTextArea();
txfArea.setBounds(new Rectangle(1, 1, 288, 135));
}
return txfArea;
}
private JTextField getTxfMsg() {
if (txfMsg == null) {
txfMsg = new JTextField();
txfMsg.setBounds(new Rectangle(1, 142, 288, 20));
txfMsg.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
out.println(txfMsg.getText());
txfMsg.setText("");
}
});
}
return txfMsg;
}
} // @jve:decl-index=0:visual-constraint="10,10"
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import java.awt.Rectangle;
import java.awt.Dimension;
import javax.swing.JTextField;
import java.net.*;
import java.io.*;
public class FrameCliente extends JFrame {
Socket socket;
PrintStream out;
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
JTextArea txfArea = null;
private JTextField txfMsg = null;
public FrameCliente(Socket socket) {
super();
this.socket = socket;
try {
out = new PrintStream(socket.getOutputStream());
}
catch(Exception ex) {
System.out.println(ex);
}
initialize();
}
private void initialize() {
this.setSize(300, 203);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");
}
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getTxfArea(), null);
jContentPane.add(getTxfMsg(), null);
}
return jContentPane;
}
private JTextArea getTxfArea() {
if (txfArea == null) {
txfArea = new JTextArea();
txfArea.setBounds(new Rectangle(1, 1, 288, 135));
}
return txfArea;
}
private JTextField getTxfMsg() {
if (txfMsg == null) {
txfMsg = new JTextField();
txfMsg.setBounds(new Rectangle(1, 142, 288, 20));
txfMsg.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
out.println(txfMsg.getText());
txfMsg.setText("");
}
});
}
return txfMsg;
}
} // @jve:decl-index=0:visual-constraint="10,10"
import java.net.*;
import java.util.*;
import java.io.*;
import javax.swing.*;
public class Servidor extends Thread {
ServerSocket srvSocket;
int totalClientes;
//public static final int PORTA = 1024;
private int PORTA, NUMCLIENTE;
ArrayList<Socket> listaClientes;
public Servidor(int port, int numcli) {
try {
this.PORTA=port;
this.NUMCLIENTE=numcli;
System.out.println("Iniciando servidor...");
srvSocket = new ServerSocket(port);
totalClientes = 0;
listaClientes = new ArrayList<Socket>();
}
catch(Exception ex) {
System.out.println(ex);
System.exit(1);
}
}
public void run() {
Socket scktOrigem, scktDestino;
Iterator<Socket> itOrigem, itDestino;
String msg;
BufferedReader in;
PrintStream out;
while (true) {
itOrigem = listaClientes.iterator();
while (itOrigem.hasNext()) {
scktOrigem = itOrigem.next();
if ( scktOrigem.isClosed() || !scktOrigem.isConnected() )
{
listaClientes.remove(scktOrigem);
this.totalClientes--;
System.out.println(totalClientes + " conectados");
}
else
try {
if ( scktOrigem.getInputStream().available() > 0 ) {
in = new BufferedReader(new InputStreamReader(scktOrigem.getInputStream()));
msg = in.readLine();
itDestino = listaClientes.iterator();
while (itDestino.hasNext()) {
scktDestino = itDestino.next();
out = new PrintStream(scktDestino.getOutputStream());
out.println(msg);
}
}
}
catch(Exception ex) {
System.out.println(ex);
}
}
try { Thread.sleep(1000); } catch(Exception ex) { }
}
}
public void aguardarClientes() {
System.out.println("Aguardando conexoes na porta " + PORTA + "...");
while(true) {
try {
if (totalClientes < this.NUMCLIENTE)
{
Socket socket = srvSocket.accept();
System.out.println("Conexao aceita de: " + socket.getInetAddress() + ":" + socket.getPort());
listaClientes.add(socket);
totalClientes++;
System.out.println(totalClientes + " conectados");
}
else
{
System.out.println("Capacidade de Conexões Esgotada.");
break; //não é isso
}
}
catch(Exception ex) {
System.out.println(ex);
System.exit(1);
}
}
}
public static void main(String[] args) {
int p,n;
p = Integer.parseInt(JOptionPane.showInputDialog("Informe a Porta do Servidor"));
n = Integer.parseInt(JOptionPane.showInputDialog("Informe a Quantidade Máxima de Clientes"));
Servidor servidor = new Servidor(p,n);
servidor.start();
servidor.aguardarClientes();
}
}
import java.util.*;
import java.io.*;
import javax.swing.*;
public class Servidor extends Thread {
ServerSocket srvSocket;
int totalClientes;
//public static final int PORTA = 1024;
private int PORTA, NUMCLIENTE;
ArrayList<Socket> listaClientes;
public Servidor(int port, int numcli) {
try {
this.PORTA=port;
this.NUMCLIENTE=numcli;
System.out.println("Iniciando servidor...");
srvSocket = new ServerSocket(port);
totalClientes = 0;
listaClientes = new ArrayList<Socket>();
}
catch(Exception ex) {
System.out.println(ex);
System.exit(1);
}
}
public void run() {
Socket scktOrigem, scktDestino;
Iterator<Socket> itOrigem, itDestino;
String msg;
BufferedReader in;
PrintStream out;
while (true) {
itOrigem = listaClientes.iterator();
while (itOrigem.hasNext()) {
scktOrigem = itOrigem.next();
if ( scktOrigem.isClosed() || !scktOrigem.isConnected() )
{
listaClientes.remove(scktOrigem);
this.totalClientes--;
System.out.println(totalClientes + " conectados");
}
else
try {
if ( scktOrigem.getInputStream().available() > 0 ) {
in = new BufferedReader(new InputStreamReader(scktOrigem.getInputStream()));
msg = in.readLine();
itDestino = listaClientes.iterator();
while (itDestino.hasNext()) {
scktDestino = itDestino.next();
out = new PrintStream(scktDestino.getOutputStream());
out.println(msg);
}
}
}
catch(Exception ex) {
System.out.println(ex);
}
}
try { Thread.sleep(1000); } catch(Exception ex) { }
}
}
public void aguardarClientes() {
System.out.println("Aguardando conexoes na porta " + PORTA + "...");
while(true) {
try {
if (totalClientes < this.NUMCLIENTE)
{
Socket socket = srvSocket.accept();
System.out.println("Conexao aceita de: " + socket.getInetAddress() + ":" + socket.getPort());
listaClientes.add(socket);
totalClientes++;
System.out.println(totalClientes + " conectados");
}
else
{
System.out.println("Capacidade de Conexões Esgotada.");
break; //não é isso
}
}
catch(Exception ex) {
System.out.println(ex);
System.exit(1);
}
}
}
public static void main(String[] args) {
int p,n;
p = Integer.parseInt(JOptionPane.showInputDialog("Informe a Porta do Servidor"));
n = Integer.parseInt(JOptionPane.showInputDialog("Informe a Quantidade Máxima de Clientes"));
Servidor servidor = new Servidor(p,n);
servidor.start();
servidor.aguardarClientes();
}
}
Eiro,
de Java eu entendo muito pouco, mas conheço bastante sobre SOCKETS.
Tem um pequeno erro de implementação no lado client :
socket.connect(
new InetSocketAddress(
InetAddress.getByName(SERVIDOR),
PORTA)
);
PORTA deveria ser 0 aqui, para que o aplicativo solicite ao sistema operacional (pilha UDP ou TCP) uma porta efêmera.
Se você fixar o número da porta diferente de 0, o client sempre usará esta porta, impossibilitando que haja uma duplicata do client rodando ao mesmo tempo e você obterá um erro como Duplicated Port ou Port Number already in use (não sei qual a exceção em Java !). Também, se algum aplicativo já alocou a porta efêmera, a qual você fixou em seu código, você terá o mesmo problema
Se você assinalar 0 à PORTA, o client solicitará ao S.O. uma porta efêmera (uma porta da gama disponível da pilha de transporte UDP/TCP/SCTP,etc) e você poderá ter vários clients rodando.
Gama de Portas efêmeras de alguns Sistemas Operacionais :
Windows : 1024 a 4999
Linux : 1024 a 4999
Solaris : 32768 a 65535
HP/UX : 49152 a 65535
AIX : 32768 a 65535
Se quiser mais informações sobre SOCKETs, pode perguntar.
(edited)
de Java eu entendo muito pouco, mas conheço bastante sobre SOCKETS.
Tem um pequeno erro de implementação no lado client :
socket.connect(
new InetSocketAddress(
InetAddress.getByName(SERVIDOR),
PORTA)
);
PORTA deveria ser 0 aqui, para que o aplicativo solicite ao sistema operacional (pilha UDP ou TCP) uma porta efêmera.
Se você fixar o número da porta diferente de 0, o client sempre usará esta porta, impossibilitando que haja uma duplicata do client rodando ao mesmo tempo e você obterá um erro como Duplicated Port ou Port Number already in use (não sei qual a exceção em Java !). Também, se algum aplicativo já alocou a porta efêmera, a qual você fixou em seu código, você terá o mesmo problema
Se você assinalar 0 à PORTA, o client solicitará ao S.O. uma porta efêmera (uma porta da gama disponível da pilha de transporte UDP/TCP/SCTP,etc) e você poderá ter vários clients rodando.
Gama de Portas efêmeras de alguns Sistemas Operacionais :
Windows : 1024 a 4999
Linux : 1024 a 4999
Solaris : 32768 a 65535
HP/UX : 49152 a 65535
AIX : 32768 a 65535
Se quiser mais informações sobre SOCKETs, pode perguntar.
(edited)
fer, um dos requisitos da implementação é que a porta precisa ser parametrizada também no cliente. em teoria, o sistema é uma especificação para clientes que rodam em pcs diferentes.
implementar os clientes em threads, por causa de java, permite que os vários processos usem a mesma porta. isso acontece porque é possível controlar o acesso à camada de rede através o método getInputStream().available() - e ele está presente no sistema do eiro (precisa ver se tá no lugar certo - aparentemente sim). (lembre-se que uma thread java não é um processo no os, é um processo na java virtual machine, que, para o os, nada mais é que um programa).
ou seja, além de cada processo acessar a porta "na sua vez", o os vai ver a maquina virtual java como um único programa acessando a porta - então não vai lançar nenhum sighup para acionar excessão em java.
eiro, tu precisa garantir que o cliente acesse a mesma porta com a qual o servidor subiu - acho que é por isso que o "painel de controle" do servidor precisa de um campo informando a porta. infelizmente tou totalmente sem tempo de rodar teu prog aqui (tou muito lascado ahuhuahau), mas, assim que puder, dou uma verificada - espero que o laerg ou os caras consigam olhar antes.
implementar os clientes em threads, por causa de java, permite que os vários processos usem a mesma porta. isso acontece porque é possível controlar o acesso à camada de rede através o método getInputStream().available() - e ele está presente no sistema do eiro (precisa ver se tá no lugar certo - aparentemente sim). (lembre-se que uma thread java não é um processo no os, é um processo na java virtual machine, que, para o os, nada mais é que um programa).
ou seja, além de cada processo acessar a porta "na sua vez", o os vai ver a maquina virtual java como um único programa acessando a porta - então não vai lançar nenhum sighup para acionar excessão em java.
eiro, tu precisa garantir que o cliente acesse a mesma porta com a qual o servidor subiu - acho que é por isso que o "painel de controle" do servidor precisa de um campo informando a porta. infelizmente tou totalmente sem tempo de rodar teu prog aqui (tou muito lascado ahuhuahau), mas, assim que puder, dou uma verificada - espero que o laerg ou os caras consigam olhar antes.
Você pode até ter este parâmetro fixo, devido a uma especificação de requisitos, mas afirmo que, em sistemas sérios, um socket do lado client, jamais deveria ter sua porta fixa, sob pena de não funcionar em todos os sistemas operacionais ou de conflitar com outro socket que já esteja ocupando a mesma porta.
O fato de usar threads pode até permitir que sua aplicação compartilhe a mesma porta, mas não evitará que ela conflite com outra aplicação que já esteja utilizando a mesma porta.
Por exemplo, eu me conecto ao Sokker e deixo o dia todo conectado :
TCP 189.121.200.34:1024 64.94.18.201:80 ESTABLISHED
Neste caso, a aplicação jamais iniciaria em minha máquina, até que eu feche o browser e me conecte novamente (o browser sim, é uma aplicação que faz uso de portas efêmeras e solicitará ao SO uma porta disponível)
O fato de usar threads pode até permitir que sua aplicação compartilhe a mesma porta, mas não evitará que ela conflite com outra aplicação que já esteja utilizando a mesma porta.
Por exemplo, eu me conecto ao Sokker e deixo o dia todo conectado :
TCP 189.121.200.34:1024 64.94.18.201:80 ESTABLISHED
Neste caso, a aplicação jamais iniciaria em minha máquina, até que eu feche o browser e me conecte novamente (o browser sim, é uma aplicação que faz uso de portas efêmeras e solicitará ao SO uma porta disponível)
claro, mas há que se ter paciência. trata-se de um aplicação para a escola do rapaz. fiz várias destas, com portas parametrizadas, há uns 10 anos atrás. o negócio é torcer para que não escolham uma porta em uso.
Ué, se eu contesto essas especificações no meu trabalho, por que não fazê-lo na escola ?
Eu bloqueei um projeto de 8 milhões de reais de uma empresa americana super-conhecida, exatamente porque não atendia a esta recomendação.
Queriam me matar, mas no final vieram me perguntar como fazia para contornar o problema.
A resposta é simples, sigam as recomendações.
Eu bloqueei um projeto de 8 milhões de reais de uma empresa americana super-conhecida, exatamente porque não atendia a esta recomendação.
Queriam me matar, mas no final vieram me perguntar como fazia para contornar o problema.
A resposta é simples, sigam as recomendações.