Visualizzazione dei risultati da 1 a 5 su 5

Discussione: thread in Java

  1. #1

    thread in Java

    ho implementato una comunicazione client-server con i multithread. quando trasmetto con i client il messaggio viene ricevuto e processato correttamente dal server . ma il messaggio di risposta
    non perviene al client. quest'ultimo resta bloccato in sttesa. L'istruzione outToClient.writeBytes(message) viene eseguita. La versione non multithread funziona correttamente :-((((

    /Servercup
    import java.net.*;
    import java.util.Vector;
    import java.io.*;
    import java.sql.*;
    import java.util.StringTokenizer;
    import java.lang.*;
    import sviluppo.pkg.MessageHL7;

    public class ServerCup implements Runnable {
    Socket s ;
    public BufferedReader inFromClient;
    public DataOutputStream outToClient;
    String message;
    public void run() {
    while (true) {
    try {
    MessageHl7 hl7 = new MessageHl7 ();
    inFromClient = new BufferedReader(new InputStreamReader(s.getInputStream()));
    outToClient = new DataOutputStream(s.getOutputStream());
    System.out.print("Connessione avvenuta con successo :-)");
    mes_hl7 = inFromClient.readLine();

    MIO CODICE
    ..........

    message = hl7.Send_message_DSR( set , query3 , QRD , QRF);
    System.out.println (message);
    outToClient.writeBytes(message);

    }
    else {
    message = hl7.gestione_errore(2);
    outToClient.writeBytes(message);
    }
    }

    catch(Exception e){
    System.out.println("Errore"+e.toString());
    }
    }
    }
    }











    // Main

    import java.lang.*;
    import java.io.*;
    import java.util.Vector;
    import java.net.*;

    public class Main{

    public static void main(String args[]){
    ServerCup p;
    Socket channel;
    ServerSocket server;
    try{
    while (true)
    {
    /* Inizializza il Socket. Porta 12000 con TimeOut di 15 secondi */
    server = new ServerSocket(2000);
    System.out.print("....in attesa di connessioni dai sistemi adt");
    /* Si pone in attesa */
    channel = server.accept();
    p = new ServerCup();
    p.s=channel;
    Thread t = new Thread(p);
    t.start();
    }
    }
    catch (IOException e){}
    }

    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,307
    Premetto che io di solito utilizzo gli ObjectOutputStream e ObjectInputStream e faccio uso di classi serializzate per la trasmissione client server, comunque, se il client rimane in attesa dell'input è possibile che sia il server a non inviare i dati... o meglio, a dare la sensazione che i dati siano inviati, ma in effetti essi siano solamente memorizzati in buffer, senza essere fisicamente spediti.

    Il mio suggerimento è di provare ad inserire un'istruzione come questa subito dopo il outToClient.writeBytes():
    codice:
    outToClient.flush();  // Questa istruzione forza l'invio dei dati nel buffer
    Non garantisco che il tuo problema sia dovuto a questo, comunque tentar non nuoce.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    ho risolto ora li riceve ma quando faccio ripartire il Client mi dice connesione refused????????? allora dov'è il multithread?

  4. #4
    mi spiego meglio...faccio partire il main poi il client e tutto va per il verso giusto . a questo punto faccio partire un altro client ma mi dice connessione rifiutata e cade cosa c'è di sbagliato aiutatemi per favore :-(

  5. #5
    risolto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.