Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
POCO F9 Pro arriva sul mercato con l'obiettivo di portare prestazioni da smartphone top di gamma in una fascia di prezzo "più aggressiva", senza rinunciare a un comparto fotografico finalmente all'altezza. Dopo averlo testato sul campo, emerge uno smartphone molto più completo rispetto alla generazione precedente, ma anche con alcuni piccoli compromessi che diventano difficili da ignorare quando il prezzo di listino sfiora i 1.000 euro.
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Snapdragon Soung Gen 2 è la piattaforma Qualcomm per i dispositivi audio sempre più integrati nel mondo dell'intelligenza artificiale: al prorpio interno tanta potenza elaborativa per gestire al meglio le necessità d'uso dell'agentic AI
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
In occasione del proprio Snapdragon Summit Qualcomm annuncia i due nuovi chip per dispositivi mobile di fascia alta che entreranno nel mercato nel corso del 2027: tanta potenza a disposizione per elaborazioni di intelligenza artificiale sempre più complesse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-02-2007, 14:59   #1
Lakaj
Senior Member
 
L'Avatar di Lakaj
 
Iscritto dal: Oct 2004
Città: Messina
Messaggi: 684
Problemi con java.net

Ciao ragazzi, ho nuovamente problemi...
NetBeans 5.5 sputa fuori queste eccezioni, in un applicativo che usa java.net.*

java.net.BindException: Permission denied
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:359)
at java.net.ServerSocket.bind(ServerSocket.java:319)
at java.net.ServerSocket.<init>(ServerSocket.java:185)
at java.net.ServerSocket.<init>(ServerSocket.java:97)
at simserver.Interf1.<init>(Interf1.java:30)
at simserver.Main.main(Main.java:27)

Ora non so se è un fatto di porte non nattate del router dannazione...
Il codice è questo:

Codice:
/*
 * Main.java
 *
 * Created on 9 febbraio 2007, 9.50
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package simserver;
import java.io.*;
/**
 *
 * @author ale
 */
public class Main {
    
    /** Creates a new instance of Main */
    public Main() {
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        // TODO code application logic here          
        Interf1 interf=new Interf1(900);
        interf.setVisible(true);
    }    
}
Codice:
/*
 * Mserver.java
 *
 * Created on 9 febbraio 2007, 9.50
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package simserver;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
/**
 *
 * @author ale
 */
public class Mserver extends JFrame implements Runnable {
    
    protected Socket client;
    private JLabel notifica;
    Thread thr;
    /** Creates a new instance of Mserver */
    public Mserver(Socket skt) {
        super(skt.getInetAddress().toString());
        this.setVisible(true);
        notifica=new JLabel("Arrivato nuovo client da "+ skt.getInetAddress());
        client=skt;        
    }
    public void init() {
        thr=new Thread(this);
        getContentPane().add(notifica);
        pack();
    }
    public void start() {
        thr.start();
    }
    public void run() {
        try {
            InputStream i=client.getInputStream();
            OutputStream o=client.getOutputStream();
            PrintStream p=new PrintStream(o);
            p.println("Benvenuti");
            p.println("Digitare HELP per lista servizi");
            int x;
            ByteArrayOutputStream command=new ByteArrayOutputStream();
            String helpcommand=new String("HELP");
            String quitcommand=new String("QUIT");
            while((x=i.read())>-1) {
                o.write(x);
                if(x==13) {
                    p.println();
                    if(helpcommand.equalsIgnoreCase(command.toString()))
                        p.println("Il solo servizio disponibile è l'help");
                    else if(quitcommand.equalsIgnoreCase(command.toString())) {
                        p.println("BYE.");
                        try {
                            Thread.sleep(1000);
                        }
                        finally {
                            break;
                        }
                    }
                    else
                        p.println("Comando non disponibile.");
                    command.reset();
                }
                else if(x!=10)
                    command.write(x);
            }
        }
        catch(IOException e) {
            e.printStackTrace();
        }
        finally {
            notifica.setText("Connessione chiusa con " + client.getInetAddress());
            try {
                client.close();
            }
            catch(IOException e) {
                e.printStackTrace();
            }
        }
    }    
}
Codice:
/*
 * Interf1.java
 *
 * Created on 9 febbraio 2007, 10.42
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package simserver;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
/**
 *
 * @author ale
 */
public class Interf1 extends JFrame {
    
    private JLabel message;
    private JLabel attesa;
    /** Creates a new instance of Interf1 */
    public Interf1(int port) {
        message=new JLabel("Server in partenza sulla porta " + port);
        getContentPane().add(message);
        pack();
        try {
            ServerSocket svr=new ServerSocket(port);                    
            message.setText("Server partito sulla porta " + svr.getLocalPort());
            Socket client;
            attesa=new JLabel("");
            getContentPane().add(attesa);
            while(true) {                
                client=svr.accept();                            
                attesa.setText("Richiesta di connessione da " + client.getInetAddress());
                (new Mserver(client)).start();
            }
        }
        catch(IOException e) {
            e.printStackTrace();
        }
    }
}
Si tratta di un demone in ascolto su una determinata porta, che accetta connessioni in multithread, io credo che il codice sia giusto l ho guardato 1000 volte
Provato con altre porte diverse da 900 ma mi da lo stesso risultato, sia con windows che con Linux
Lakaj è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2007, 16:41   #2
Lakaj
Senior Member
 
L'Avatar di Lakaj
 
Iscritto dal: Oct 2004
Città: Messina
Messaggi: 684
Sono stato 3 ore a cercare un problema che non c'era...
Non vedevo il messaggio di lancio del server perchè la setVisible del JFrame era impostata esternamente, grazie a quel demente del mio prof che mi ha insegnato cosi'
Ovviamente alla seconda esecuzione del server mi diceva che la porta era già in uso...

-_-'
Lakaj è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2007, 17:16   #3
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Se mi permetti di dirlo, il tuo non è un buon "design". Già solo la classe Interf1 non va affatto bene. Hai usato metodi che agiscono sulla interfaccia utente e metodi che lavorano con i socket allegramente insieme e per di più nel costruttore della classe ... il tutto eseguito dallo stesso thread.

Quando viene costruita l'istanza di Interf1, non sei nel thread di Swing, quindi non dovresti interagire con l'interfaccia utente. Idem nella classe Mserver.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2007, 18:59   #4
Lakaj
Senior Member
 
L'Avatar di Lakaj
 
Iscritto dal: Oct 2004
Città: Messina
Messaggi: 684
Quote:
Originariamente inviato da andbin
Se mi permetti di dirlo, il tuo non è un buon "design". Già solo la classe Interf1 non va affatto bene. Hai usato metodi che agiscono sulla interfaccia utente e metodi che lavorano con i socket allegramente insieme e per di più nel costruttore della classe ... il tutto eseguito dallo stesso thread.

Quando viene costruita l'istanza di Interf1, non sei nel thread di Swing, quindi non dovresti interagire con l'interfaccia utente. Idem nella classe Mserver.
Aspetta, che intendi per thread di swing ?
Io estendo JFrame appositamente per interagire con Swing...
Intendi che dovrei avere una classe che gestisca separatamente i socket e istanziarla dentro quelle che mi servono ?
Lo dici per un motivo squisitamente estetico oppure pensi che puo' portare a problemi di sincronizzazione coi thread ?

fino a estendere la classe JFrame e implementare la Runnable contemporaneamente mi pare che non ci siano problemi vero ?
Le amenità iniziano utilizzando socket liberi dentro la suddetta e li hai ragionissima...

dimmi la tua...

vabbè si e poi in effetti tutto il codice messo dentro il costruttore è una blasfemia (lo so)

Ultima modifica di Lakaj : 09-02-2007 alle 19:03.
Lakaj è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2007, 21:46   #5
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da Lakaj
Aspetta, che intendi per thread di swing ?
Io estendo JFrame appositamente per interagire con Swing...
No ... Swing usa un suo apposito thread, al cui interno effettua tutte le operazioni necessarie per gestire/visualizzare/aggiornare l'interfaccia utente ed anche (molto importante!) per dispacciare gli eventi ai vari listener.
Se devi interagire con l'interfaccia utente Swing (es. fare un setText su un componente o cose del genere), devi farlo nel contesto del suo thread, cioè devi essere all'interno di quello che si chiama event-dispatch thread.
Agire sull'interfaccia utente direttamente da un altro thread potrebbe causare problemi di concorrenza!

Leggi <qui>.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2007, 22:10   #6
Lakaj
Senior Member
 
L'Avatar di Lakaj
 
Iscritto dal: Oct 2004
Città: Messina
Messaggi: 684
Quote:
Originariamente inviato da andbin
No ... Swing usa un suo apposito thread, al cui interno effettua tutte le operazioni necessarie per gestire/visualizzare/aggiornare l'interfaccia utente ed anche (molto importante!) per dispacciare gli eventi ai vari listener.
Se devi interagire con l'interfaccia utente Swing (es. fare un setText su un componente o cose del genere), devi farlo nel contesto del suo thread, cioè devi essere all'interno di quello che si chiama event-dispatch thread.
Agire sull'interfaccia utente direttamente da un altro thread potrebbe causare problemi di concorrenza!

Leggi <qui>.
Ah, ma intendi:
Codice:
// Execute all GUI code on the event dispatch thread, even initialization:
        EventQueue.invokeLater(new Runnable() { public void run() {

            // Create frame with title "Hello, World!"
            JFrame f = new JFrame("Hello, World!");
 etc.
etc.
Ah, allora sbaglio totalmente programmazione...
Eppure sul Mokabook ha quella filosofia

Io purtroppo sono vittima della mia università, della mia città e della mia regione, che è forse troppo vicina all'Africa...

Ultima modifica di Lakaj : 09-02-2007 alle 22:25.
Lakaj è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2007, 09:06   #7
Lakaj
Senior Member
 
L'Avatar di Lakaj
 
Iscritto dal: Oct 2004
Città: Messina
Messaggi: 684
Quindi, in teoria, un codice del genere, anche se ordinato e preciso, potrebbe portare a problemi di concorrenza ?

Codice:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class JTextFieldExample extends JFrame {
  private JTextField textField;
  private JLabel label;
  public JTextFieldExample() {
    super(“JTextField”);
    setSize(200, 80);
    getContentPane().setLayout(new BorderLayout());
    textField = new JTextField();
    label = new JLabel();
    getContentPane().add(BorderLayout.NORTH, textField);
    textField.addActionListener(new EnterTextListener());
    getContentPane().add(BorderLayout.SOUTH, label);
    setVisible(true);
  }
  class EnterTextListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
       label.setText(“Testo inserito: “ + textField.getText());
       textField.setText(“”);
    }
  }
  public static void main(String argv[]) {
    JTextFieldExample jtf = new JTextFieldExample();
  }
}
Lakaj è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2007, 10:42   #8
Lakaj
Senior Member
 
L'Avatar di Lakaj
 
Iscritto dal: Oct 2004
Città: Messina
Messaggi: 684
O meglio, per evitare problemi di concorrenza, dovrei creare un'istanza di JTextFieldExample all'interno di

Codice:
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new JTextFieldExample().setVisible(true);
            }
        });
Dico giusto ?
A quanto ho capito la invokeLater rappresenta un ambiente sicuro in cui esiste certezza che un dato componente A non possa essere disturbato diciamo 'simultaneamente'(anche se in un contesto mono-processore la parola simult. è errata) da 2 diversi blocchi di codice...

Ultima modifica di Lakaj : 10-02-2007 alle 10:50.
Lakaj è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2007, 14:41   #9
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da Lakaj
Quindi, in teoria, un codice del genere, anche se ordinato e preciso, potrebbe portare a problemi di concorrenza ?
[...]
Se hai letto bene la pagina che ho linkato, hai sicuramente visto che ci sono delle eccezioni. Nel semplice codice che hai postato, il setVisible(true) lo fai alla fine del costruttore e dopo non fai più nulla con la GUI.
Prima di quella chiamata, il frame non è ancora visibile e non è cioè "realized". Quindi, sebbene tutta la inizializzazione la fai nel contesto del "main" thread e non nel event-dispatch thread, non dovrebbero esserci problemi di concorrenza. Per questo caso specifico, si intende.

Quote:
Originariamente inviato da Lakaj
O meglio, per evitare problemi di concorrenza, dovrei creare un'istanza di JTextFieldExample all'interno di
[....]
Dico giusto ?
Sì, parlando in generale, sarebbe meglio.

Quote:
Originariamente inviato da Lakaj
A quanto ho capito la invokeLater rappresenta un ambiente sicuro in cui esiste certezza che un dato componente A non possa essere disturbato diciamo 'simultaneamente'(anche se in un contesto mono-processore la parola simult. è errata) da 2 diversi blocchi di codice...
invokeAndWait/invokeLater servono solo per chiedere che un Runnable (il metodo run() ) venga eseguito nel contesto del event-dispatch thread.
Quindi, dentro quel Runnable, le operazioni che fai sull'interfaccia utente sono intrinsecamente sicure. Dopotutto il e.d.t. fa solo una cosa per volta ... o sta aggiornando l'interfaccia utente, o sta dispacciando un evento o sta eseguendo un tuo Runnable.

La differenza tra i due metodi è solo il fatto del sincrono/asincrono. E per invokeAndWait c'è da notare che non deve essere usato se si è già nel e.d.t. (altrimenti blocchi tutto!).
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole! realme 16 Pro Harry Potter Edition: il nuovo mid...
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Opera: la VPN gratuita si accende in aut...
Giochi capaci di costruirsi in tempo rea...
Giochi DX11 su Intel Arc e Proton: le ot...
Bentley Torcal ufficiale: 876cv e ricari...
Counter-Strike 2: con poche modifiche, V...
Silent Hill potrebbe tornare al cinema c...
L'integrazione di ChatGPT su Siri è stat...
ASML: 'Non vendiamo assolutamente nulla ...
Anthropic limita Claude Opus 5.5 nello s...
Microsoft 365, l'Antitrust respinge le p...
SAP NOW AI Tour Milan: una giornata con ...
Quake Champions dice addio al free-to-pl...
Anker AeroClip 2, li indossi e dopo un p...
Notebook ASUS da gaming per il Back to S...
Auto elettriche UE al 21,7%: sorpasso si...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:06.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v